Skip to main content

valence_core/
trait_schema.rs

1//! Trait schema metadata for `valence_trait_schema!`.
2
3use crate::schema_api::SchemaPolicyRule;
4
5/// Minimal field descriptor stored in trait definitions.
6#[derive(Debug, Clone)]
7pub struct TraitFieldDef {
8    pub name: &'static str,
9    pub field_type: &'static str,
10    pub required: bool,
11}
12
13/// Policy rule names for a single CRUD operation bucket.
14#[derive(Debug, Clone)]
15pub struct TraitPolicyRules {
16    pub always_allow: &'static [SchemaPolicyRule],
17    pub allow: &'static [SchemaPolicyRule],
18    pub block: &'static [SchemaPolicyRule],
19    pub always_block: &'static [SchemaPolicyRule],
20}
21
22/// Entity-level privacy policies declared by a trait.
23#[derive(Debug, Clone)]
24pub struct TraitPolicies {
25    pub read: Option<&'static TraitPolicyRules>,
26    pub create: Option<&'static TraitPolicyRules>,
27    pub update: Option<&'static TraitPolicyRules>,
28    pub delete: Option<&'static TraitPolicyRules>,
29}
30
31/// Runtime metadata for a single Valence trait definition.
32#[derive(Debug, Clone)]
33pub struct TraitDefinition {
34    pub name: &'static str,
35    pub fields: &'static [TraitFieldDef],
36    pub connection_names: &'static [&'static str],
37    pub policies: Option<&'static TraitPolicies>,
38}
39
40/// Lazy initializer for trait definitions.
41pub struct TraitDefinitionInit(pub fn() -> &'static TraitDefinition);
42
43inventory::collect!(TraitDefinitionInit);
44
45/// Links a concrete table to the trait it implements.
46pub struct TraitImplementor {
47    pub trait_name: &'static str,
48    pub table_name: &'static str,
49}
50
51inventory::collect!(TraitImplementor);