Lines
100 %
Functions
20 %
Branches
//! Auto-generated from doc/scripting/entity_registry.org.
//! Do not edit manually — edit the org file + cargo build.
//!
//! Name-bearing entity field layout for the host value decoder.
//! Field ORDER matches the wasm struct slot order in `ENTITY_SPECS`
//! (accessor rows, then struct-only extras), so a field's position
//! here is its `struct.get` index.
use crate::ast::EntityKind;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EntityFieldKind {
String,
Ratio,
I32,
Pair,
}
#[derive(Debug, Clone, Copy)]
pub struct EntityFieldLayout {
pub name: &'static str,
pub kind: EntityFieldKind,
pub struct EntityLayout {
pub kind: EntityKind,
pub label: &'static str,
pub fields: &'static [EntityFieldLayout],
pub const ENTITY_LAYOUTS: &[EntityLayout] = &[
EntityLayout {
kind: EntityKind::Account,
label: "account",
fields: &[
EntityFieldLayout { name: "id", kind: EntityFieldKind::String },
EntityFieldLayout { name: "name", kind: EntityFieldKind::String },
EntityFieldLayout { name: "parent", kind: EntityFieldKind::String },
],
},
kind: EntityKind::Commodity,
label: "commodity",
EntityFieldLayout { name: "symbol", kind: EntityFieldKind::String },
kind: EntityKind::Transaction,
label: "transaction",
EntityFieldLayout { name: "note", kind: EntityFieldKind::String },
EntityFieldLayout { name: "post-date", kind: EntityFieldKind::String },
kind: EntityKind::Split,
label: "split",
EntityFieldLayout { name: "account-id", kind: EntityFieldKind::String },
EntityFieldLayout { name: "commodity-id", kind: EntityFieldKind::String },
EntityFieldLayout { name: "value", kind: EntityFieldKind::Ratio },
kind: EntityKind::Tag,
label: "tag",
EntityFieldLayout { name: "value", kind: EntityFieldKind::String },
kind: EntityKind::Price,
label: "price",
EntityFieldLayout { name: "currency-id", kind: EntityFieldKind::String },
EntityFieldLayout { name: "price-date", kind: EntityFieldKind::String },
kind: EntityKind::SshKey,
label: "sshkey",
EntityFieldLayout { name: "fingerprint", kind: EntityFieldKind::String },
kind: EntityKind::ReportNode,
label: "reportnode",
EntityFieldLayout { name: "label", kind: EntityFieldKind::String },
EntityFieldLayout { name: "depth", kind: EntityFieldKind::I32 },
EntityFieldLayout { name: "amount", kind: EntityFieldKind::Ratio },
EntityFieldLayout { name: "children", kind: EntityFieldKind::Pair },
];
/// The decode layout for `kind`, or `None` for kinds with no field
/// layout (e.g. `Condition`, which isn't a server entity).
#[must_use]
pub fn entity_layout(kind: EntityKind) -> Option<&'static EntityLayout> {
ENTITY_LAYOUTS.iter().find(|l| l.kind == kind)