openleadr_client/
resource.rs1use crate::{ClientRef, Result};
2use chrono::{DateTime, Utc};
3use openleadr_wire::{
4 resource::{Resource, ResourceContent, ResourceId},
5 ven::VenId,
6};
7use std::sync::Arc;
8
9#[derive(Debug, Clone)]
15pub struct ResourceClient {
16 client: Arc<ClientRef>,
17 ven_id: VenId,
18 data: Resource,
19}
20
21impl ResourceClient {
22 pub(super) fn from_resource(client: Arc<ClientRef>, ven_id: VenId, resource: Resource) -> Self {
23 Self {
24 client,
25 ven_id,
26 data: resource,
27 }
28 }
29
30 pub fn id(&self) -> &ResourceId {
32 &self.data.id
33 }
34
35 pub fn created_date_time(&self) -> DateTime<Utc> {
37 self.data.created_date_time
38 }
39
40 pub fn modification_date_time(&self) -> DateTime<Utc> {
42 self.data.modification_date_time
43 }
44
45 pub fn content(&self) -> &ResourceContent {
47 &self.data.content
48 }
49
50 pub fn content_mut(&mut self) -> &mut ResourceContent {
54 &mut self.data.content
55 }
56
57 pub async fn update(&mut self) -> Result<()> {
60 self.data = self
61 .client
62 .put(
63 &format!("vens/{}/resources/{}", self.ven_id, self.id()),
64 &self.data.content,
65 )
66 .await?;
67 Ok(())
68 }
69
70 pub async fn delete(self) -> Result<Resource> {
72 self.client
73 .delete(&format!("vens/{}/resources/{}", self.ven_id, self.id()))
74 .await
75 }
76}