j_api/resource/object/
mod.rs

1use crate::link::Links;
2use crate::relationship::Relationship;
3use crate::ResourceTrait;
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6use std::collections::HashMap;
7
8#[derive(Clone, Debug, Serialize, Deserialize)]
9pub struct ResourceObject {
10    r#type: String,
11    id: String,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    attributes: Option<HashMap<String, Value>>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    relationships: Option<HashMap<String, Relationship>>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    links: Option<Links>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    meta: Option<String>,
20}
21
22impl ResourceObject {
23    pub fn new(r#type: String, id: String) -> Self {
24        ResourceObject {
25            r#type,
26            id,
27            attributes: None,
28            relationships: None,
29            links: None,
30            meta: None,
31        }
32    }
33
34    pub fn relationships(&mut self, relationships: Option<HashMap<String, Relationship>>) {
35        self.relationships = relationships;
36    }
37
38    pub fn from(resource: impl ResourceTrait) -> ResourceObject {
39        resource.to_resource_object()
40    }
41
42    pub fn add_attributes(&mut self, attributes: Option<HashMap<String, Value>>) {
43        self.attributes = attributes;
44    }
45}