use crate::{ClientKind, ClientRef, Result};
use chrono::{DateTime, Utc};
use openleadr_wire::resource::{BlResourceRequest, Resource, ResourceId, ResourceRequest};
use std::sync::Arc;
#[derive(Debug, Clone)]
pub struct ResourceClient<K> {
client: Arc<ClientRef<K>>,
data: Resource,
}
impl<K: ClientKind> ResourceClient<K> {
pub(super) fn from_resource(client: Arc<ClientRef<K>>, resource: Resource) -> Self {
Self {
client,
data: resource,
}
}
pub fn id(&self) -> &ResourceId {
&self.data.id
}
pub fn created_date_time(&self) -> DateTime<Utc> {
self.data.created_date_time
}
pub fn modification_date_time(&self) -> DateTime<Utc> {
self.data.modification_date_time
}
pub fn content(&self) -> &BlResourceRequest {
&self.data.content
}
pub fn content_mut(&mut self) -> &mut BlResourceRequest {
&mut self.data.content
}
pub async fn update(&mut self) -> Result<()> {
self.data = self
.client
.put(
&format!("resources/{}", self.id()),
&ResourceRequest::BlResourceRequest(self.data.content.clone()),
)
.await?;
Ok(())
}
pub async fn delete(self) -> Result<Resource> {
self.client
.delete(&format!("resources/{}", self.id()))
.await
}
}