majordomus_cli/capability/builtin/
views.rs1use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6use serde_json::Value;
7
8use crate::capability::benchmark::{BenchmarkCases, CaseContext, NamedCase};
9use crate::model::{Object, Provenance as ObjectProvenance};
10
11#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
13pub struct ObjectView {
14 pub uri: String,
16 pub id: String,
18 pub kind: String,
20 pub identity: String,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub title: Option<String>,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub description: Option<String>,
28 pub metadata: Value,
30 pub provenance: ObjectProvenance,
32 pub media_type: String,
34 pub content: String,
36}
37
38impl ObjectView {
39 pub(crate) fn of(o: &Object) -> Self {
40 ObjectView {
41 uri: o.uri.clone(),
42 id: format!("{}.{}", o.kind, o.identity),
43 kind: o.kind.clone(),
44 identity: o.identity.clone(),
45 title: o.title.clone(),
46 description: o.description.clone(),
47 metadata: o.metadata.clone(),
48 provenance: o.provenance.clone(),
49 media_type: o.media_type.to_string(),
50 content: o.content.clone(),
51 }
52 }
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
57pub struct ObjectSummary {
58 pub uri: String,
60 pub id: String,
62 pub kind: String,
64 pub identity: String,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub title: Option<String>,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 pub description: Option<String>,
72 pub path: String,
74}
75
76impl ObjectSummary {
77 pub(crate) fn of(o: &Object) -> Self {
78 ObjectSummary {
79 uri: o.uri.clone(),
80 id: format!("{}.{}", o.kind, o.identity),
81 kind: o.kind.clone(),
82 identity: o.identity.clone(),
83 title: o.title.clone(),
84 description: o.description.clone(),
85 path: o.provenance.path.clone(),
86 }
87 }
88}
89
90#[derive(Debug, Default, Serialize, Deserialize, JsonSchema)]
92#[serde(deny_unknown_fields)]
93pub struct Empty {}
94
95impl BenchmarkCases for Empty {
96 fn benchmark_cases(_: &CaseContext<'_>) -> Vec<NamedCase<Self>> {
97 vec![NamedCase::new("default", Empty {})]
98 }
99}