@@ -12,7 +12,7 @@ use std::sync::Arc;
1212use std:: time:: Duration ;
1313
1414use camino:: Utf8PathBuf ;
15- use derive_more:: Constructor ;
15+ use derive_more:: { Constructor , Display } ;
1616use serde:: { Deserialize , Serialize } ;
1717use serde_with:: serde_as;
1818use thiserror:: Error ;
@@ -45,6 +45,63 @@ pub type Threshold = v2::logging::Threshold;
4545
4646pub type AccessTokens = HashMap < String , String > ;
4747
48+ pub const LATEST_VERSION : & str = "2" ;
49+
50+ /// Info about the configuration specification.
51+ #[ derive( Serialize , Deserialize , PartialEq , Eq , Debug , Display ) ]
52+ pub struct Metadata {
53+ #[ serde( default = "Metadata::default_version" ) ]
54+ #[ serde( flatten) ]
55+ version : Version ,
56+ }
57+
58+ impl Default for Metadata {
59+ fn default ( ) -> Self {
60+ Self {
61+ version : Self :: default_version ( ) ,
62+ }
63+ }
64+ }
65+
66+ impl Metadata {
67+ fn default_version ( ) -> Version {
68+ Version :: latest ( )
69+ }
70+ }
71+
72+ /// The configuration version.
73+ #[ derive( Serialize , Deserialize , PartialEq , Eq , Debug , Display ) ]
74+ pub struct Version {
75+ #[ serde( default = "Version::default_semver" ) ]
76+ version : String ,
77+ }
78+
79+ impl Default for Version {
80+ fn default ( ) -> Self {
81+ Self {
82+ version : Self :: default_semver ( ) ,
83+ }
84+ }
85+ }
86+
87+ impl Version {
88+ fn new ( semver : & str ) -> Self {
89+ Self {
90+ version : semver. to_owned ( ) ,
91+ }
92+ }
93+
94+ fn latest ( ) -> Self {
95+ Self {
96+ version : LATEST_VERSION . to_string ( ) ,
97+ }
98+ }
99+
100+ fn default_semver ( ) -> String {
101+ LATEST_VERSION . to_string ( )
102+ }
103+ }
104+
48105#[ derive( Serialize , Deserialize , PartialEq , Eq , Debug , Clone , Constructor ) ]
49106pub struct TrackerPolicy {
50107 // Cleanup job configuration
@@ -208,6 +265,9 @@ pub enum Error {
208265
209266 #[ error( "The error for errors that can never happen." ) ]
210267 Infallible ,
268+
269+ #[ error( "Unsupported configuration version: {version}" ) ]
270+ UnsupportedVersion { version : Version } ,
211271}
212272
213273impl From < figment:: Error > for Error {
0 commit comments