# Radiation Radio receiver absorbs electromagnetic radiation and converts it in some signal. Radio transmitter converts a signal into electromagnetic radiation and emit it. This crate calls raw bytes as a radiation. It allows 'absorb' the radiation and convert it into Rust type, and vice versa, 'emit' Rust type as a radiation. Trait `Absorb` parse bytes and return the typed value. It may fail and return an error. Trait `Emit` convert the typed value into raw bytes. ## Derive ### Attribute `tag` At enum. Specifies the type of tag, it may be any type implementing `Absorb` and `Display` (for error handling). Default is `u16`. At variant. Specifies the value of tag for the variant. If the type of the tag implements `Default` and `Add` numeric (e.g. it is meaningful to do `tag + 1`). Then the attribute can be omitted. Default is 0, 1, 2,... ### Attributes `custom_absorb` and `custom_emit` At field. Allows to specify custom function for absorb and emit the field. Useful if the field has foreign type, for example `SocketAddr`. ### Attribute `as_str` At field. The implementation will absorb and emit the string and use `FromStr` and `Display` on the field to convert. ### Example ``` #[derive(Debug, PartialEq, Eq, Absorb, Emit)] #[tag(u8)] enum SomeEnum { #[tag(1)] A { one: u8, two: u8, // specify a function to parse the field with #[custom_absorb(absorb)] #[custom_emit(emit)] three: u16, }, // use `FromStr` implementation to parse the value from `str` B(#[as_str] u16), C(u32), } ``` See `tests.rs` for more information and examples. ### Limit Attribute `limit` overwrite the `L` argument when parse the field. This attribute provides a type which implements `Limit` trait. The trait provides lower and upper limit in bytes. Also, it carry information which limit will be on next field, or in inner structure. See `tests.rs` for more information and examples.