[−][src]Macro hdk::entry
The entry
macro is a helper for creating ValidatingEntryType
definitions
for use within the define_zome macro.
It has 7 component parts:
- name:
name
is simply the descriptive name of the entry type, such as "post", or "user". It is what must be given as theentry_type_name
argument when calling commit_entry and the other data read/write functions. - description:
description
is something that is primarily for human readers of your code, just describe this entry type - sharing:
sharing
defines what distribution over the DHT, or not, occurs with entries of this type, possible values are defined in the Sharing enum - native_type:
native_type
references a given Rust struct, which provides a clear schema for entries of this type. - validation_package:
validation_package
is a special identifier, which declares which data is required from peers when attempting to validate entries of this type. Possible values are found within ValidationPackageDefinition - validation:
validation
is a callback function which will be called any time that a (DHT) node processes or stores this entry, triggered through actions such as commit_entry, update_entry, remove_entry. It always expects two arguments, the first of which is the entry attempting to be validated, the second is the validationcontext
, which offers a variety of metadata useful for validation. See ValidationData for more details. - links:
links
is a vector of link definitions represented byValidatingLinkDefinition
. Links can be defined with thelink!
macro or, more concise, with either theto!
orfrom!
macro, to define an association pointing from this entry type to another, or one that points back from the other entry type to this one. See link!, to! and from! for more details.
Examples
The following is a standalone Rust file that exports a function which can be called
to get a ValidatingEntryType
of a "post".
#[derive(Serialize, Deserialize, Debug, DefaultJson,Clone)] pub struct Post { content: String, date_created: String, } pub fn definition() -> ValidatingEntryType { entry!( name: "post", description: "a short social media style sharing of content", sharing: Sharing::Public, validation_package: || { hdk::ValidationPackageDefinition::ChainFull }, validation: |validation_data: hdk::EntryValidationData<Post>| { match validation_data { EntryValidationData::Create{entry:test_entry,validation_data:_} => { (test_entry.content != "FAIL") .ok_or_else(|| "FAIL content is not allowed".to_string()) } _ => { Err("Failed to validate with wrong entry type".to_string()) } }}, links: [ to!( "post", link_type: "comments", validation_package: || { hdk::ValidationPackageDefinition::ChainFull }, validation: | _validation_data: hdk::LinkValidationData| { Ok(()) } ) ] ) }