Format crates comparison

This document tracks feature parity across all facet format crates.

Legend:

  • โœ… = Fully supported with tests
  • ๐ŸŸก = Partial support or untested
  • ๐Ÿšซ = Not supported
  • โž– = Not applicable to this format

Note: msgp = facet-msgpack (shortened for column width)

Overview

Note: S = Serialization, D = Deserialization

CrateDirectionFormat TypeParserShowcase
facet-jsonSDTextEvent-based (custom)View
facet-kdlSDText (node-based)DOM (kdl-rs)View
facet-yamlSDTextEvent-based (saphyr)View
facet-tomlSDTextDOM (toml_edit)๐Ÿšซ
facet-msgpackSDBinaryEvent-based (custom)๐Ÿšซ
facet-asn1SBinary(Custom)๐Ÿšซ
facet-xdrSBinary(Custom)๐Ÿšซ
facet-argsDCLI(Custom)๐Ÿšซ
facet-urlencodedDText(Custom)๐Ÿšซ
facet-csvSText(Custom)๐Ÿšซ

Scalar Types

Typejsonkdlyamltomlmsgpasn1xdrargsurlenccsv
boolโœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…
u8..u64โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…
i8..i64โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…
u128/i128๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก
f32/f64โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…
charโœ…โœ…โœ…โœ…โœ…๐ŸŸก๐ŸŸกโœ…โœ…โœ…
NonZero integersโœ…๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐Ÿšซ๐Ÿšซ๐ŸŸก๐ŸŸก๐ŸŸก

String Types

All formats support String, &str (with best-effort borrowing), and Cow<str>.

Lists, Sets, and Maps

Typejsonkdlyamltomlmsgpasn1xdrargsurlenccsv
Vec<T>โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…๐ŸŸก๐ŸŸก
[T; N] (arrays)โœ…โœ…โœ…โœ…โœ…โœ…โœ…๐ŸŸก๐ŸŸก๐ŸŸก
HashSet<T>โœ…โœ…โœ…๐ŸŸกโœ…๐ŸŸก๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ
BTreeSet<T>โœ…โœ…โœ…๐ŸŸกโœ…๐ŸŸก๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ
HashMap<K, V>โœ…๐ŸŸกโœ…โœ…โœ…๐ŸŸก๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ
BTreeMap<K, V>โœ…๐ŸŸกโœ…โœ…โœ…๐ŸŸก๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ
Non-string map keysโœ…๐Ÿšซโœ…๐Ÿšซโœ…๐Ÿšซ๐Ÿšซโž–โž–โž–

Compound Types

Typejsonkdlyamltomlmsgpasn1xdrargsurlenccsv
Option<T>โœ…โœ…โœ…โœ…โœ…๐ŸŸก๐ŸŸกโœ…โœ…๐ŸŸก
Result<T, E>โœ…๐ŸŸก๐ŸŸก๐ŸŸกโœ…๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ

Smart Pointers

Typejsonkdlyamltomlmsgpasn1xdrargsurlenccsv
Box<T>โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…๐ŸŸก๐ŸŸก
Rc<T>โœ…โœ…โœ…โœ…โœ…๐ŸŸก๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ
Arc<T>โœ…โœ…โœ…โœ…โœ…๐ŸŸก๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ
Arc<str>โœ…๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ
Arc<[T]>โœ…๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ

External Types

Typejsonkdlyamltomlmsgpasn1xdrargsurlenccsv
chronoโœ…๐ŸŸกโœ…๐Ÿšซ๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ
timeโœ…๐ŸŸกโœ…๐Ÿšซ๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ
jiffโœ…๐ŸŸก๐ŸŸก๐Ÿšซ๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ
uuidโœ…๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ
ulidโœ…๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ
caminoโœ…๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ
ordered-floatโœ…๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ
bytesโœ…๐ŸŸก๐ŸŸก๐ŸŸกโœ…โœ…โœ…๐Ÿšซ๐Ÿšซ๐Ÿšซ

Struct Types

Typejsonkdlyamltomlmsgpasn1xdrargsurlenccsv
Named structsโœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…
Tuple structsโœ…โœ…โœ…โœ…โœ…โœ…โœ…๐ŸŸก๐ŸŸกโœ…
Unit structsโœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…๐ŸŸก๐ŸŸก

Enum Representations

Tagging Strategies

Representationjsonkdlyamltomlmsgpasn1xdrargsurlenccsv
Externally tagged (default)โœ…โœ…โœ…โœ…โœ…โœ…โœ…โž–โž–โž–
Internally tagged (tag=)โœ…๐ŸŸกโœ…๐Ÿšซ๐ŸŸก๐Ÿšซ๐Ÿšซโž–โž–โž–
Adjacently tagged (tag+content)โœ…๐ŸŸกโœ…๐Ÿšซ๐ŸŸก๐Ÿšซ๐Ÿšซโž–โž–โž–
Untaggedโœ…๐ŸŸกโœ…๐Ÿšซ๐ŸŸก๐Ÿšซ๐Ÿšซโž–โž–โž–

Examples (JSON):

// Externally tagged: { "Variant": "value" }
// Internally tagged: { "type": "Variant", "data": "value" }  
// Adjacently tagged: { "tag": "Variant", "content": "value" }

Attributes

Attributejsonkdlyamltomlmsgpasn1xdrargsurlenccsv
renameโœ…โœ…โœ…โœ…โœ…๐ŸŸก๐ŸŸกโœ…โœ…๐ŸŸก
rename_allโœ…โœ…โœ…โœ…โœ…๐ŸŸก๐ŸŸกโœ…๐ŸŸก๐ŸŸก
defaultโœ…โœ…โœ…โœ…โœ…๐ŸŸก๐ŸŸกโœ…โœ…๐ŸŸก
skip_serializingโœ…โœ…โœ…๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโž–โž–๐ŸŸก
skip_deserializingโœ…โœ…โœ…๐ŸŸก๐ŸŸกโž–โž–๐ŸŸก๐ŸŸกโž–
skip_serializing_ifโœ…๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโž–โž–๐ŸŸก
transparentโœ…โœ…โœ…๐ŸŸกโœ…๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก
flattenโœ…โœ…โœ…๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ
deny_unknown_fieldsโœ…โœ…๐ŸŸก๐ŸŸกโœ…โž–โž–๐Ÿšซโœ…โž–
deserialize_withโœ…โœ…๐ŸŸก๐ŸŸก๐ŸŸกโž–โž–๐ŸŸก๐ŸŸกโž–
serialize_withโœ…๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโž–โž–๐ŸŸก
type_tag (KDL-specific)โž–โœ…โž–โž–โž–โž–โž–โž–โž–โž–

Diagnostics

Featurejsonkdlyamltomlmsgpasn1xdrargsurlenccsv
miette::Diagnosticโœ…โœ…โœ…๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซโœ…๐Ÿšซ๐Ÿšซ
Spanned<T> wrapperโœ…โœ…โœ…๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซโœ…๐Ÿšซ๐Ÿšซ
Solver integrationโœ…โœ…๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ
"Did you mean?" suggestionsโœ…โœ…๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ

Advanced Features

Featurejsonkdlyamltomlmsgpasn1xdrargsurlenccsv
Nested flattenโœ…โœ…๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ
Multiple flattened enumsโœ…โœ…๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ
Value-based disambiguationโœ…โœ…๐ŸŸก๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ๐Ÿšซ

no_std Support

Featurejsonkdlyamltomlmsgpasn1xdrargsurlenccsv
no_std + allocโœ…โœ…โœ… (deser)โœ…๐ŸŸกโœ…โœ…๐ŸŸก๐ŸŸก๐ŸŸก
Serializationโœ…โœ…๐Ÿšซ (needs std)โœ…โœ…โœ…โœ…โž–โž–โœ…
Deserializationโœ…โœ…โœ…โœ…โœ…โž–โž–๐ŸŸก๐ŸŸกโž–