tiedcrossing_client/
tree.rs1use super::{Entity, Result};
5
6use std::io::Read;
7use std::ops::Deref;
8
9use drawbridge_type::{Meta, TreeDirectory, TreeEntry, TreePath};
10
11use mime::Mime;
12use ureq::serde::Serialize;
13
14pub struct Node<'a>(Entity<'a>);
15
16impl<'a> Deref for Node<'a> {
17 type Target = Entity<'a>;
18
19 fn deref(&self) -> &Self::Target {
20 &self.0
21 }
22}
23
24impl<'a> Node<'a> {
25 pub fn new(entity: Entity<'a>, path: &TreePath) -> Self {
26 if path.is_empty() {
27 Self(entity)
28 } else {
29 Self(entity.child(&path.to_string()))
30 }
31 }
32
33 pub fn create_bytes(&self, mime: &Mime, data: impl AsRef<[u8]>) -> Result<bool> {
34 self.0.create_bytes(mime, data)
35 }
36
37 pub fn create_json(&self, mime: &Mime, val: &impl Serialize) -> Result<bool> {
38 self.0.create_json(mime, val)
39 }
40
41 pub fn create_from(&self, meta: &Meta, rdr: impl Read) -> Result<bool> {
42 self.0.create_from(meta, rdr)
43 }
44
45 pub fn create_directory<C>(&self, dir: &TreeDirectory<TreeEntry<C>>) -> Result<bool> {
46 let mime = TreeDirectory::<C>::TYPE
47 .parse()
48 .expect("failed to parse tree directory media type");
49 self.create_json(&mime, dir)
50 }
51}