use super::*;
use holochain_integrity_types::{CapClaimEntry, CapGrantEntry};
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum OpEntry<ET>
where
ET: UnitEnum,
{
CreateEntry {
app_entry: ET,
action: Action,
},
CreateAgent {
agent: AgentPubKey,
action: Action,
},
UpdateEntry {
original_action_hash: ActionHash,
original_entry_hash: EntryHash,
app_entry: ET,
action: Action,
},
UpdateAgent {
new_key: AgentPubKey,
original_key: AgentPubKey,
original_action_hash: ActionHash,
action: Action,
},
CreateCapGrant {
entry: CapGrantEntry,
action: Action,
},
CreateCapClaim {
entry: CapClaimEntry,
action: Action,
},
UpdateCapGrant {
original_action_hash: ActionHash,
original_entry_hash: EntryHash,
action: Action,
entry: CapGrantEntry,
},
UpdateCapClaim {
original_action_hash: ActionHash,
original_entry_hash: EntryHash,
action: Action,
entry: CapClaimEntry,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum OpUpdate<ET>
where
ET: UnitEnum,
{
Entry {
app_entry: ET,
action: Action,
},
PrivateEntry {
original_action_hash: ActionHash,
app_entry_type: <ET as UnitEnum>::Unit,
action: Action,
},
Agent {
new_key: AgentPubKey,
original_key: AgentPubKey,
original_action_hash: ActionHash,
action: Action,
},
CapClaim {
original_action_hash: ActionHash,
action: Action,
},
CapGrant {
original_action_hash: ActionHash,
action: Action,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct OpDelete {
pub action: Action,
}
#[cfg(test)]
mod tests {
use super::*;
use holo_hash::{ActionHash, AgentPubKey, EntryHash};
use holochain_integrity_types::dht_v2::{ActionData, ActionHeader, DeleteData};
fn action_from_data(data: ActionData) -> Action {
Action {
header: ActionHeader {
author: AgentPubKey::from_raw_36(vec![1u8; 36]),
timestamp: holochain_integrity_types::timestamp::Timestamp::from_micros(0),
action_seq: 0,
prev_action: None,
},
data,
}
}
#[test]
fn op_delete_constructs_and_clones() {
let action = action_from_data(ActionData::Delete(DeleteData {
deletes_address: ActionHash::from_raw_36(vec![2u8; 36]),
deletes_entry_address: EntryHash::from_raw_36(vec![3u8; 36]),
}));
let op = OpDelete {
action: action.clone(),
};
assert_eq!(op.clone(), op);
}
}