1 unstable release

0.1.0 Jun 26, 2024

#670 in Rust patterns

Download history 67/week @ 2024-06-20 92/week @ 2024-06-27 21/week @ 2024-07-04 20/week @ 2024-07-11 20/week @ 2024-07-18 12/week @ 2024-07-25 11/week @ 2024-08-08 27/week @ 2024-08-15 34/week @ 2024-08-22 60/week @ 2024-08-29

132 downloads per month
Used in 17 crates

Apache-2.0

155KB
3.5K SLoC

SwimOS Model

This model is a generic representation of the SwimOS serialization model. Any valid serialized record can be deserialized as an instance of the Value type in this crate.

The Value type

A SwimOS Value can be of any one of the following kinds.

  • An absent value (represented as Value::Extant).
  • A primitive value from the following set:
  1. Booleans, represented as Value::BooleanValue
  2. Integers. When deserializing, an appropriate Rust integer type will be chosen, depending on this size of the integer.
  3. 64bit floating point numbers, represented as Value::Float64Value.
  4. UTF-8 Strings, represented as Value::Text.
  5. Arrays of bytes (represented as Value::Data).
  • A record consisting of an list of attributes (Attr) and and list of items (Item). This is represented as Value::Record.

An attribute is a labelled (with a UTF-8 String) Value.

An item is one of:

  • A value item which is an instance of Value. This is represented as Item::ValueItem.
  • A slot item which is a pair of two Values, the first of which is interpreted as a key. This is represented as Item::Slot.

Note that the attributes and items of a record are always ordered, although the order may not always be significant, for example if a record, consisting only of slots, is used to represent a map.

The record and [macro@value] macros can be used to simplify the creation of Value instances.

Using the model

The use the model for serialization or deserialization, a format supporting the SwimOS model is required. The default format used by SwimsOS is the Recon markup language, an example of which can be found in the swimos_recon crate.

Dependencies

~5.5–7.5MB
~131K SLoC