Derive Macro entity_macros::Ent[][src]

#[derive(Ent)]
{
    // Attributes available to this derive:
    #[ent]
}

Derives the Ent trait and additional typed functionality

use entity::{Ent, Id, WeakDatabaseRc};

/// Define an entity and derive all associated ent functionality
///
/// The entity must also implement clone as this is a requirement of
/// the Ent trait
///
/// If using serde, this struct will need to implement serialize and
/// deserialize itself AND include the attribute ent(typetag)
#[derive(Clone, Ent)]
pub struct PageEnt {
    /// Required and can only be specified once to indicate the struct
    /// field that contains the ent's id
    #[ent(id)]
    id: Id,

    /// Required and can only be specified once to indicate the struct
    /// field that contains the database. Must be an option!
    ///
    /// If using serde, this field will need to be skipped via serde(skip)
    /// as it will not be serialized and, when deserializing, will be
    /// filled in with the database automatically
    #[ent(database)]
    database: WeakDatabaseRc,

    /// Required and can only be specified once to indicate the struct
    /// field that contains the timestamp of when the ent was created
    #[ent(created)]
    created: u64,

    /// Required and can only be specified once to indicate the struct
    /// field that contains the timestamp of when the ent was last updated
    #[ent(last_updated)]
    last_updated: u64,

    /// A public ent field that is indexed, meaning that searches for this
    /// ent by its title should be faster, but this will also take up
    /// more space in the database
    #[ent(field(indexed))]
    title: String,

    /// A public ent field that is not indexed
    #[ent(field)]
    url: String,

    /// An edge out to a ContentEnt that is shallowly connected, meaning
    /// that when this ent is deleted, the ent connected by this edge
    /// will remove this ent if it is reversely-connected
    #[ent(edge(policy = "shallow", type = "ContentEnt"))]
    header: Id,

    /// An optional edge out to a ContentEnt that is deeply connected,
    /// meaning that when this ent is deleted, the ent connected by this
    /// edge will also be deleted
    #[ent(edge(policy = "deep", type = "ContentEnt"))]
    subheader: Option<Id>,

    /// An edge out to zero or more ContentEnt, defaulting to doing
    /// nothing special when this ent is deleted
    #[ent(edge(type = "ContentEnt"))]
    paragraphs: Vec<Id>,
}

#[derive(Clone, Ent)]
pub struct ContentEnt {
    #[ent(id)]
    id: Id,

    #[ent(database)]
    database: WeakDatabaseRc,

    #[ent(created)]
    created: u64,

    #[ent(last_updated)]
    last_updated: u64,

    #[ent(field)]
    text: String,
}