#![allow(clippy::too_many_arguments)] use std::collections::{HashMap, HashSet}; use std::convert::TryFrom; use std::ops::{ControlFlow, Deref}; use std::sync::Arc; use automerge::transaction::Transactable; use automerge::{Automerge, AutomergeError, ObjType, ScalarValue, Value}; use nonempty::NonEmpty; use crate::cob::automerge::doc::{Document, DocumentError}; use crate::cob::automerge::shared; use crate::cob::automerge::shared::*; use crate::cob::automerge::store::{Error, Store}; use crate::cob::automerge::transaction::{Transaction, TransactionError}; use crate::cob::automerge::value::{FromValue, ValueError}; use crate::cob::common::*; use crate::cob::{Contents, History, ObjectId, Timestamp, TypeName}; use crate::git; use crate::prelude::*; // Re-export generic patch. pub use crate::cob::patch::*; impl TryFrom> for Patch { type Error = DocumentError; fn try_from(doc: Document) -> Result { let obj_id = doc.get_id(automerge::ObjId::Root, "patch")?; let title = doc.get(&obj_id, "title")?; let author = doc.get(&obj_id, "author")?; let state = doc.get(&obj_id, "state")?; let target = doc.get(&obj_id, "target")?; let timestamp = doc.get(&obj_id, "timestamp")?; let revisions = doc.list(&obj_id, "revisions", lookup::revision)?; let labels: HashSet