33 个版本 (破坏性更新)
0.80.0 | 2023年7月20日 |
---|---|
0.78.0 | 2023年6月12日 |
0.76.0 | 2023年3月22日 |
0.72.0 | 2022年12月21日 |
0.6.1 | 2021年11月23日 |
#12 in #zomes
每月下载量 209
32KB
405 行
Holochain CRUD 库(CEPS 模式)
Holochain zomes 的 CRUD 库,实现 CEPS 模式(链式、条目、永久链接、基于状态的)
Holochain 版本映射表
有关该软件包的哪个版本适用于每个 Holochain 版本的信息,请参阅 docs/Holochain_Version_Map.md
概览
安装
在 Cargo.toml
中添加的示例
[dependencies]
hc_crud_ceps = "0.3.0"
常见导入示例
use hc_crud::{
now,
create_entity, get_entity, get_entities, update_entity, delete_entity,
Entity, EntryModel, EntityType,
};
基本用法
CRUD 操作
以下导入和结构体假定适用于所有示例
use hdk::prelude::*;
use hc_crud::{
now,
create_entity, get_entity, get_entities, update_entity, delete_entity,
Entity, EntryModel, EntityType,
};
#[hdk_entry_helper]
#[derive(Clone)]
pub struct PostEntry {
pub title: String,
pub message: String,
pub published_at: Option<u64>,
pub last_updated: Option<u64>,
}
#[hdk_entry_defs]
#[unit_enum(UnitEntryTypes)]
pub enum EntryTypes {
#[entry_def]
Post(PostEntry),
}
impl EntryModel<EntryTypes> for PostEntry {
fn name() -> &'static str { "Post" }
fn get_type(&self) -> EntityType {
EntityType::new( "post", "entry" )
}
fn to_input(&self) -> EntryTypes {
EntryTypes::Post(self.clone())
}
}
创建条目
示例
let input = PostEntry {
title: String::from("Greeting"),
message: String::from("Hello world!"),
published_at: Some(1633108520744),
last_updated: None,
};
let post_entity = create_entity( &input )?;
[读取] 获取条目
示例
let post_entity = get_entity( &entity.id )?;
更新条目
示例
let post_entity = update_entity( &entity.address, |mut previous: PostEntry, _| {
previous.message = String::from("Hello, world!");
previous.last_updated = Some( now()? );
Ok(previous)
})?;
删除条目
示例
delete_entity::<PostEntry,EntryTypes>( &entity.id )?;
关系 CRUD 示例
为帖子的条目创建一个 1 对多关系,以便具有评论条目。
以下示例使用此附加结构体
#[hdk_entry_helper]
#[derive(Clone)]
pub struct CommentEntry {
pub message: String,
pub published_at: Option<u64>,
pub last_updated: Option<u64>,
}
impl EntryModel<EntryTypes> for CommentEntry {
fn name() -> &'static str { "Comment" }
fn get_type(&self) -> EntityType {
EntityType::new( "comment", "entry" )
}
fn to_input(&self) -> EntryTypes {
EntryTypes::Comment(self.clone())
}
}
将 CommentEntry
添加到 EntryTypes
枚举
#[hdk_entry_defs]
#[unit_enum(UnitEntryTypes)]
pub enum EntryTypes {
#[entry_def]
Post(PostEntry),
+ #[entry_def]
+ Comment(CommentEntry),
}
创建一个 CommentEntry
并将其链接到 PostEntry
#[hdk_link_types]
pub enum LinkTypes {
Post,
Comment,
}
let input = CommentEntry {
message: String::from("Where is the sun?"),
published_at: Some( now()? ),
last_updated: None,
};
let comment_entity = create_entity( &input )?;
comment_entity.link_from( &post_entity.id, LinkTypes::Comment, None )?;
获取特定基本和标签的 Collection
let collection : Vec<Entity<CommentEntry>> = get_entities( &post_entity.id, LinkTypes::Comment, None )?;
API 参考文档
贡献
请参阅 CONTRIBUTING.md
依赖关系
~16–29MB
~434K SLoC