Skip to content

Commit eebe9f7

Browse files
committed
Add doctested examples to most public methods
1 parent 5b28f9b commit eebe9f7

File tree

2 files changed

+152
-8
lines changed

2 files changed

+152
-8
lines changed

Diff for: ciborium/src/de/mod.rs

+55
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,24 @@ where
786786
/// If you want to deserialize faster at the cost of more memory, consider using
787787
/// [`from_reader_with_buffer`](from_reader_with_buffer) with a larger buffer,
788788
/// for example 64KB.
789+
///
790+
/// # Example
791+
/// ```rust
792+
/// use ciborium::from_reader;
793+
///
794+
/// #[derive(Debug, serde::Deserialize, Eq, PartialEq)]
795+
/// struct Example {
796+
/// a: u64,
797+
/// aa: u64,
798+
/// b: u64,
799+
/// }
800+
///
801+
/// let cbor = hex::decode("a36161182a61621910686261611901a4").unwrap();
802+
/// let expected = Example { a: 42, aa: 420, b: 4200 };
803+
///
804+
/// let deserialized: Example = from_reader(cbor.as_slice()).unwrap();
805+
/// assert_eq!(deserialized, expected);
806+
/// ```
789807
#[inline]
790808
pub fn from_reader<T: de::DeserializeOwned, R: Read>(reader: R) -> Result<T, Error<R::Error>>
791809
where
@@ -798,6 +816,25 @@ where
798816
/// Deserializes as CBOR from a type with [`impl
799817
/// ciborium_io::Read`](ciborium_io::Read), using a caller-specific buffer as a
800818
/// temporary scratch space.
819+
///
820+
/// # Example
821+
/// ```rust
822+
/// use ciborium::from_reader_with_buffer;
823+
///
824+
/// #[derive(Debug, serde::Deserialize, Eq, PartialEq)]
825+
/// struct Example {
826+
/// a: u64,
827+
/// aa: u64,
828+
/// b: u64,
829+
/// }
830+
///
831+
/// let cbor = hex::decode("a36161182a61621910686261611901a4").unwrap();
832+
/// let expected = Example { a: 42, aa: 420, b: 4200 };
833+
///
834+
/// let mut scratch = [0; 8192];
835+
/// let deserialized: Example = from_reader_with_buffer(cbor.as_slice(), &mut scratch).unwrap();
836+
/// assert_eq!(deserialized, expected);
837+
/// ```
801838
#[inline]
802839
pub fn from_reader_with_buffer<T: de::DeserializeOwned, R: Read>(
803840
reader: R,
@@ -820,6 +857,24 @@ where
820857
/// will result in [`Error::RecursionLimitExceeded`] .
821858
///
822859
/// Set a high recursion limit at your own risk (of stack exhaustion)!
860+
///
861+
/// # Example
862+
/// ```rust
863+
/// use ciborium::de::from_reader_with_recursion_limit;
864+
///
865+
/// #[derive(Debug, serde::Deserialize, Eq, PartialEq)]
866+
/// struct Example {
867+
/// a: u64,
868+
/// aa: u64,
869+
/// b: u64,
870+
/// }
871+
///
872+
/// let cbor = hex::decode("a36161182a61621910686261611901a4").unwrap();
873+
/// let expected = Example { a: 42, aa: 420, b: 4200 };
874+
///
875+
/// let deserialized: Example = from_reader_with_recursion_limit(cbor.as_slice(), 1024).unwrap();
876+
/// assert_eq!(deserialized, expected);
877+
/// ```
823878
#[inline]
824879
pub fn from_reader_with_recursion_limit<T: de::DeserializeOwned, R: Read>(
825880
reader: R,

Diff for: ciborium/src/ser/mod.rs

+97-8
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,35 @@ pub enum CanonicalizationScheme {
3232

3333
#[cfg(feature = "std")]
3434
impl CanonicalizationScheme {
35-
/// Does this canonicalisation scheme require sorting of keys.
35+
/// Does this canonicalization scheme require sorting of keys.
3636
pub fn is_sorting(&self) -> bool {
3737
matches!(self, Self::Rfc7049 | Self::Rfc8049)
3838
}
39-
40-
// pub fn key<K: serde::Serialize>(&self, key: &K) -> Result<Vec<u8>, Error<std::io::Error>> {
41-
// let mut buffer = Vec::new();
42-
// let mut serializer = Serializer::new(&mut buffer, true);
43-
// key.serialize(&mut serializer)?;
44-
// Ok(buffer)
45-
// }
4639
}
4740

4841
/// A serializer for CBOR.
42+
///
43+
/// # Example
44+
/// ```rust
45+
/// use serde::Serialize;
46+
/// use ciborium::Serializer;
47+
/// use ciborium::ser::CanonicalizationScheme;
48+
///
49+
/// #[derive(serde::Serialize)]
50+
/// struct Example {
51+
/// a: u64,
52+
/// aa: u64,
53+
/// b: u64,
54+
/// }
55+
///
56+
/// let example = Example { a: 42, aa: 420, b: 4200 };
57+
///
58+
/// let mut buffer = Vec::with_capacity(1024);
59+
/// let mut serializer = Serializer::new(&mut buffer, CanonicalizationScheme::Rfc8049);
60+
/// example.serialize(&mut serializer).unwrap();
61+
///
62+
/// assert_eq!(hex::encode(&buffer), "a36161182a61621910686261611901a4");
63+
/// ```
4964
pub struct Serializer<W> {
5065
encoder: Encoder<W>,
5166

@@ -647,6 +662,23 @@ where
647662
}
648663

649664
/// Serializes as CBOR into `Vec<u8>`.
665+
///
666+
/// # Example
667+
/// ```rust
668+
/// use ciborium::to_vec;
669+
///
670+
/// #[derive(serde::Serialize)]
671+
/// struct Example {
672+
/// a: u64,
673+
/// aa: u64,
674+
/// b: u64,
675+
/// }
676+
///
677+
/// let example = Example { a: 42, aa: 420, b: 4200 };
678+
/// let bytes = to_vec(&example).unwrap();
679+
///
680+
/// assert_eq!(hex::encode(&bytes), "a36161182a6261611901a46162191068");
681+
/// ```
650682
#[cfg(feature = "std")]
651683
#[inline]
652684
pub fn to_vec<T: ?Sized + ser::Serialize>(value: &T) -> Result<Vec<u8>, Error<std::io::Error>> {
@@ -657,6 +689,24 @@ pub fn to_vec<T: ?Sized + ser::Serialize>(value: &T) -> Result<Vec<u8>, Error<st
657689
}
658690

659691
/// Canonically serializes as CBOR into `Vec<u8>` with a specified [CanonicalizationScheme].
692+
///
693+
/// # Example
694+
/// ```rust
695+
/// use ciborium::to_vec_canonical;
696+
/// use ciborium::ser::CanonicalizationScheme;
697+
///
698+
/// #[derive(serde::Serialize)]
699+
/// struct Example {
700+
/// a: u64,
701+
/// aa: u64,
702+
/// b: u64,
703+
/// }
704+
///
705+
/// let example = Example { a: 42, aa: 420, b: 4200 };
706+
/// let bytes = to_vec_canonical(&example, CanonicalizationScheme::Rfc8049).unwrap();
707+
///
708+
/// assert_eq!(hex::encode(&bytes), "a36161182a61621910686261611901a4");
709+
/// ```
660710
#[cfg(feature = "std")]
661711
#[inline]
662712
pub fn to_vec_canonical<T: ?Sized + ser::Serialize>(value: &T, scheme: CanonicalizationScheme) -> Result<Vec<u8>, Error<std::io::Error>> {
@@ -667,6 +717,25 @@ pub fn to_vec_canonical<T: ?Sized + ser::Serialize>(value: &T, scheme: Canonical
667717
}
668718

669719
/// Serializes as CBOR into a type with [`impl ciborium_io::Write`](ciborium_io::Write)
720+
///
721+
/// # Example
722+
/// ```rust
723+
/// use ciborium::into_writer;
724+
///
725+
/// #[derive(serde::Serialize)]
726+
/// struct Example {
727+
/// a: u64,
728+
/// aa: u64,
729+
/// b: u64,
730+
/// }
731+
///
732+
/// let example = Example { a: 42, aa: 420, b: 4200 };
733+
///
734+
/// let mut bytes = Vec::new();
735+
/// into_writer(&example, &mut bytes).unwrap();
736+
///
737+
/// assert_eq!(hex::encode(&bytes), "a36161182a6261611901a46162191068");
738+
/// ```
670739
#[inline]
671740
pub fn into_writer<T: ?Sized + ser::Serialize, W: Write>(
672741
value: &T,
@@ -682,6 +751,26 @@ where
682751
/// Canonically serializes as CBOR into a type with [`impl ciborium_io::Write`](ciborium_io::Write)
683752
///
684753
/// This will sort map keys in output according to a specified [CanonicalizationScheme].
754+
///
755+
/// # Example
756+
/// ```rust
757+
/// use ciborium::into_writer_canonical;
758+
/// use ciborium::ser::CanonicalizationScheme;
759+
///
760+
/// #[derive(serde::Serialize)]
761+
/// struct Example {
762+
/// a: u64,
763+
/// aa: u64,
764+
/// b: u64,
765+
/// }
766+
///
767+
/// let example = Example { a: 42, aa: 420, b: 4200 };
768+
///
769+
/// let mut bytes = Vec::new();
770+
/// into_writer_canonical(&example, &mut bytes, CanonicalizationScheme::Rfc8049).unwrap();
771+
///
772+
/// assert_eq!(hex::encode(&bytes), "a36161182a61621910686261611901a4");
773+
/// ```
685774
#[cfg(feature = "std")]
686775
#[inline]
687776
pub fn into_writer_canonical<T: ?Sized + ser::Serialize, W: Write>(

0 commit comments

Comments
 (0)