Skip to main content

CitizenField

Trait CitizenField 

Source
pub trait CitizenField: Sized {
    // Required methods
    fn encode_field(&self) -> Expr;
    fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>;

    // Provided method
    fn decode_field_value(
        cx: &mut Cx,
        value: Value,
        field: &'static str,
    ) -> Result<Self> { ... }
}
Expand description

Encodes and decodes a Rust type as one citizen constructor field.

Generated and hand-written citizens use this trait to project each field to an Expr for the constructor encoding and to recover it on read-construct. The kernel owns Expr/Value/Cx; sim-citizen provides the field codec and the standard scalar/collection implementations.

§Examples

The expr-level encode/decode pair round-trips without a context:

let original: Vec<i64> = vec![1, 2, 3];
let expr = original.encode_field();
let decoded = Vec::<i64>::decode_field_expr(&expr, "numbers").unwrap();
assert_eq!(decoded, original);

Required Methods§

Source

fn encode_field(&self) -> Expr

Encodes the field value as its constructor Expr.

Source

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Decodes the field from a constructor Expr, naming field in errors.

Provided Methods§

Source

fn decode_field_value( cx: &mut Cx, value: Value, field: &'static str, ) -> Result<Self>

Decodes the field from a runtime Value via its Expr projection.

Default implementation projects value to an Expr through cx and delegates to CitizenField::decode_field_expr.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl CitizenField for CapabilityName

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl CitizenField for Expr

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, _field: &'static str) -> Result<Self>

Source§

impl CitizenField for String

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl CitizenField for Symbol

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl CitizenField for bool

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl CitizenField for f64

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl CitizenField for i8

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl CitizenField for i16

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl CitizenField for i32

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl CitizenField for i64

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl CitizenField for i128

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl CitizenField for isize

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl CitizenField for u8

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl CitizenField for u16

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl CitizenField for u32

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl CitizenField for u64

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl CitizenField for usize

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl<A, B> CitizenField for (A, B)

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl<T> CitizenField for Option<T>
where T: CitizenField,

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Source§

impl<T> CitizenField for Vec<T>
where T: CitizenField,

Source§

fn encode_field(&self) -> Expr

Source§

fn decode_field_expr(expr: &Expr, field: &'static str) -> Result<Self>

Implementors§