use crate::{
error::{ZomeApiError, ZomeApiResult},
Dispatch,
};
use holochain_core_types::entry::Entry;
use holochain_persistence_api::cas::content::Address;
use holochain_wasm_utils::api_serialization::get_entry::{
EntryHistory, GetEntryArgs, GetEntryOptions, GetEntryResult, GetEntryResultType,
StatusRequestKind,
};
pub fn get_entry(address: &Address) -> ZomeApiResult<Option<Entry>> {
let entry_result = get_entry_result(address, GetEntryOptions::default())?;
let entry = if !entry_result.found() {
None
} else {
entry_result.latest()
};
Ok(entry)
}
pub fn get_entry_initial(address: &Address) -> ZomeApiResult<Option<Entry>> {
let entry_result = get_entry_result(
address,
GetEntryOptions::new(StatusRequestKind::Initial, true, false, Default::default()),
)?;
Ok(entry_result.latest())
}
pub fn get_entry_history(address: &Address) -> ZomeApiResult<Option<EntryHistory>> {
let entry_result = get_entry_result(
address,
GetEntryOptions::new(StatusRequestKind::All, true, false, Default::default()),
)?;
if !entry_result.found() {
return Ok(None);
}
match entry_result.result {
GetEntryResultType::All(history) => Ok(Some(history)),
_ => Err(ZomeApiError::from("shouldn't happen".to_string())),
}
}
pub fn get_entry_result(
address: &Address,
options: GetEntryOptions,
) -> ZomeApiResult<GetEntryResult> {
Dispatch::GetEntry.with_input(GetEntryArgs {
address: address.clone(),
options,
})
}