diff --git a/CHANGELOG.md b/CHANGELOG.adoc similarity index 51% rename from CHANGELOG.md rename to CHANGELOG.adoc index 3f72905..364a378 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.adoc @@ -1,67 +1,65 @@ -# Changelog += Changelog +:toc: +:toclevels: 1 +:idprefix: +:idseparator: - - +== [Unreleased] -## [Unreleased] - ReleaseDate +== [v1.1.0] - 2024-03-21 -### Added - -- publishing to [crates.io](https://crates.io) - -## [v1.1.0] - 2024-03-21 - -### Added +=== Added - implement serializing into generic `io::Write` -### Fixed +=== Fixed - fix parsing CRLF -## [v1.0.0] - 2023-03-10 +== [v1.0.0] - 2023-03-10 -### Added +=== Added - implement literal strings -### Fixed +=== Fixed - fix serializing strings containing `:` - fix serializing certain escaped characters -## [v0.2.4] - 2023-03-01 +== [v0.2.4] - 2023-03-01 -### Fixed +=== Fixed - fix incorrect parsing of unquoted strings -## [v0.2.3] - 2023-02-24 +== [v0.2.3] - 2023-02-24 -### Fixed +=== Fixed - support backslashes in delimited strings -## [v0.2.2] - 2023-02-18 +== [v0.2.2] - 2023-02-18 -### Fixed +=== Fixed - fix deserialization failing on arrays and objects in some cases -## [v0.2.1] - 2022-12-28 +== [v0.2.1] - 2022-12-28 -### Fixed +=== Fixed - fix serializing Unicode -## [v0.2.0] - 2022-11-25 +== [v0.2.0] - 2022-11-25 -### Added +=== Added * parsing & deserialization -## [v0.1.0] - 2022-11-18 +== [v0.1.0] - 2022-11-18 -### Added +=== Added * initial release * serialization diff --git a/Cargo.toml b/Cargo.toml index a394beb..3526b48 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,27 +1,15 @@ [package] name = "serde_sjson" version = "1.1.0" -authors = ["Lucas Schwiderski"] -categories = ["encoding", "parser-implementations"] -description = "An SJSON serialization file format" -documentation = "https://docs.rs/serde_sjson" edition = "2021" keywords = ["serde", "serialization", "sjson"] -license-file = "LICENSE" -repository = "https://github.com/sclu1034/serde_sjson" -exclude = [ - ".github/", - ".ci/", - "Justfile" -] +description = "An SJSON serialization file format" +categories = ["encoding", "parser-implementations"] [dependencies] -nom = "7" -nom_locate = "4.1" -serde = { version = "1.0", default-features = false } +nom = "7.1.3" +nom_locate = "4.1.0" +serde = { version = "1.0.154", default-features = false } [dev-dependencies] -serde = { version = "1.0.194", features = ["derive"] } - -[badges] -maintenance = { status = "passively-maintained" } +serde = { version = "1.0.154", features = ["derive"] } diff --git a/Justfile b/Justfile index 131d0e5..c052f9a 100644 --- a/Justfile +++ b/Justfile @@ -1,26 +1,12 @@ project := "serde_sjson" default := "run" -build *ARGS: - cargo build {{ARGS}} - cargo readme > README.md - run *ARGS: cargo run -- {{ARGS}} test *ARGS: cargo test {{ARGS}} -doc: - cargo doc --no-deps - cargo readme > README.md - -serve-doc port='8000': doc - python3 -m http.server {{port}} --directory target/doc - -release version execute='': - cargo release --sign --allow-branch master {{ if execute != "" { '-x' } else { '' } }} {{version}} - coverage *ARGS: RUSTFLAGS="-C instrument-coverage" cargo test --tests {{ARGS}} || true cargo profdata -- merge -sparse default*.profraw -o {{project}}.profdata diff --git a/README.adoc b/README.adoc new file mode 100644 index 0000000..56a9faf --- /dev/null +++ b/README.adoc @@ -0,0 +1,13 @@ += Serde SJSON +:idprefix: +:idseparator: +:toc: macro +:toclevels: 1 +:!toc-title: +:caution-caption: :fire: +:important-caption: :exclamtion: +:note-caption: :paperclip: +:tip-caption: :bulb: +:warning-caption: :warning: + +A __ser__ialization/__de__serialization library for __Simplified JSON__, specifically, the Bitsquid/Stingray flavor. diff --git a/README.md b/README.md deleted file mode 100644 index 7b60d9e..0000000 --- a/README.md +++ /dev/null @@ -1,69 +0,0 @@ -# serde_sjson - -A **ser**ialization/**de**serialization library for Simplified JSON, -the Bitsquid/Stingray flavor of JSON. - -## Usage - -### Serializing - -```rust -use serde::Serialize; -use serde_sjson::Result; - -#[derive(Serialize)] -struct Person { - name: String, - age: u8, - friends: Vec, -} - -fn main() -> Result<()> { - let data = Person { - name: String::from("Marc"), - age: 21, - friends: vec![String::from("Jessica"), String::from("Paul")], - }; - - let s = serde_sjson::to_string(&data)?; - - println!("{}", s); - - Ok(()) -} -``` - -### Deserializing - -```rust -use serde::Deserialize; -use serde_sjson::Result; - -#[derive(Deserialize)] -struct Person { - name: String, - age: u8, - friends: Vec, -} - -fn main() -> Result<()> { - let sjson = r#" - name = Marc - age = 21 - friends = [ - Jessica - Paul - ]"#; - - let data: Person = serde_sjson::from_str(sjson)?; - - println!( - "{} is {} years old and has {} friends.", - data.name, - data.age, - data.friends.len() - ); - - Ok(()) -} -``` diff --git a/README.tpl b/README.tpl deleted file mode 100644 index 0d9b104..0000000 --- a/README.tpl +++ /dev/null @@ -1,3 +0,0 @@ -# {{crate}} - -{{readme}} diff --git a/release.toml b/release.toml deleted file mode 100644 index df0c8c9..0000000 --- a/release.toml +++ /dev/null @@ -1,5 +0,0 @@ -pre-release-replacements = [ - {file="CHANGELOG.md", search="Unreleased", replace="{{version}}"}, - {file="CHANGELOG.md", search="ReleaseDate", replace="{{date}}"}, - {file="CHANGELOG.md", search="", replace="\n\n## [Unreleased] - ReleaseDate", exactly=1}, -] diff --git a/src/de.rs b/src/de.rs index b28e116..8d35613 100644 --- a/src/de.rs +++ b/src/de.rs @@ -5,7 +5,6 @@ use serde::Deserialize; use crate::error::{Error, ErrorCode, Result}; use crate::parser::*; -/// A container for deserializing Rust values from SJSON. pub struct Deserializer<'de> { input: Span<'de>, is_top_level: bool, @@ -13,7 +12,7 @@ pub struct Deserializer<'de> { impl<'de> Deserializer<'de> { #![allow(clippy::should_implement_trait)] - pub(crate) fn from_str(input: &'de str) -> Self { + pub fn from_str(input: &'de str) -> Self { Self { input: Span::from(input), is_top_level: true, @@ -66,8 +65,6 @@ impl<'de> Deserializer<'de> { } } -/// Deserializes an SJSON string to a Rust value. -#[inline] pub fn from_str<'a, T>(input: &'a str) -> Result where T: Deserialize<'a>, diff --git a/src/error.rs b/src/error.rs index 9673524..feee003 100644 --- a/src/error.rs +++ b/src/error.rs @@ -2,11 +2,8 @@ use std::{fmt, io}; use crate::parser::Token; -/// An alias for a `Result` with `serde_sjson::Error`. pub type Result = std::result::Result; -/// A type encapsulating the different errors that might occurr -/// during serialization or deserialization. #[derive(PartialEq)] pub struct Error { inner: Box, diff --git a/src/lib.rs b/src/lib.rs index afac0e7..ea30715 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,71 +1,3 @@ -//! A **ser**ialization/**de**serialization library for Simplified JSON, -//! the Bitsquid/Stingray flavor of JSON. -//! -//! # Usage -//! -//! ## Serializing -//! -//! ``` -//! use serde::Serialize; -//! use serde_sjson::Result; -//! -//! #[derive(Serialize)] -//! struct Person { -//! name: String, -//! age: u8, -//! friends: Vec, -//! } -//! -//! fn main() -> Result<()> { -//! let data = Person { -//! name: String::from("Marc"), -//! age: 21, -//! friends: vec![String::from("Jessica"), String::from("Paul")], -//! }; -//! -//! let s = serde_sjson::to_string(&data)?; -//! -//! println!("{}", s); -//! -//! Ok(()) -//! } -//! ``` -//! -//! ## Deserializing -//! -//! ``` -//! use serde::Deserialize; -//! use serde_sjson::Result; -//! -//! #[derive(Deserialize)] -//! struct Person { -//! name: String, -//! age: u8, -//! friends: Vec, -//! } -//! -//! fn main() -> Result<()> { -//! let sjson = r#" -//! name = Marc -//! age = 21 -//! friends = [ -//! Jessica -//! Paul -//! ]"#; -//! -//! let data: Person = serde_sjson::from_str(sjson)?; -//! -//! println!( -//! "{} is {} years old and has {} friends.", -//! data.name, -//! data.age, -//! data.friends.len() -//! ); -//! -//! Ok(()) -//! } -//! ``` - mod de; mod error; mod parser; diff --git a/src/ser.rs b/src/ser.rs index 7efd83b..532f78f 100644 --- a/src/ser.rs +++ b/src/ser.rs @@ -7,14 +7,12 @@ use crate::error::{Error, ErrorCode, Result}; // TODO: Make configurable const INDENT: [u8; 2] = [0x20, 0x20]; -/// A container for serializing Rust values into SJSON. pub struct Serializer { // The current indentation level level: usize, writer: W, } -/// Serializes a value into a generic `io::Write`. #[inline] pub fn to_writer(writer: &mut W, value: &T) -> Result<()> where @@ -25,7 +23,6 @@ where value.serialize(&mut serializer) } -/// Serializes a value into a byte vector. #[inline] pub fn to_vec(value: &T) -> Result> where @@ -36,7 +33,6 @@ where Ok(vec) } -/// Serializes a value into a string. #[inline] pub fn to_string(value: &T) -> Result where @@ -55,7 +51,6 @@ impl Serializer where W: io::Write, { - /// Creates a new `Serializer`. pub fn new(writer: W) -> Self { Self { level: 0, writer } } diff --git a/tests/serialize.rs b/tests/serialize.rs index 380fec0..7afb926 100644 --- a/tests/serialize.rs +++ b/tests/serialize.rs @@ -1,4 +1,4 @@ -use serde_sjson::to_string; +use serde_sjson::{to_string, Error}; #[test] fn serialize_null() {