1mod crd;
7mod metadata;
8pub mod options;
9pub mod store;
10
11pub use self::crd::*;
12pub use self::metadata::*;
13
14use serde::de::DeserializeOwned;
15use serde::Deserialize;
16use serde::Serialize;
17use std::fmt::Debug;
18
19pub trait Status:
20 Sized + Debug + Clone + Default + Serialize + DeserializeOwned + Send + Sync
21{
22}
23
24pub trait Header:
25 Sized + Debug + Clone + Default + Serialize + DeserializeOwned + Send + Sync
26{
27}
28
29pub trait Spec:
31 Sized + Debug + Clone + Default + Serialize + DeserializeOwned + Send + Sync
32{
33 type Status: Status;
34
35 type Header: Header;
36
37 const NAME_SPACED: bool = true;
39
40 fn metadata() -> &'static Crd;
42
43 fn label() -> &'static str {
44 Self::metadata().names.kind
45 }
46
47 fn api_version() -> String {
48 let metadata = Self::metadata();
49 if metadata.group == "core" {
50 return metadata.version.to_owned();
51 }
52 format!("{}/{}", metadata.group, metadata.version)
53 }
54
55 fn kind() -> String {
56 Self::metadata().names.kind.to_owned()
57 }
58
59 fn make_same(&mut self, _other: &Self) {}
62}
63
64#[derive(Deserialize, Serialize, Debug, Default, Clone)]
65pub struct DefaultHeader {}
66
67impl Header for DefaultHeader {}