@@ -12,7 +12,7 @@ use std::sync::Arc;
12
12
use std:: time:: Duration ;
13
13
14
14
use camino:: Utf8PathBuf ;
15
- use derive_more:: Constructor ;
15
+ use derive_more:: { Constructor , Display } ;
16
16
use serde:: { Deserialize , Serialize } ;
17
17
use serde_with:: serde_as;
18
18
use thiserror:: Error ;
@@ -45,6 +45,63 @@ pub type Threshold = v2::logging::Threshold;
45
45
46
46
pub type AccessTokens = HashMap < String , String > ;
47
47
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
+
48
105
#[ derive( Serialize , Deserialize , PartialEq , Eq , Debug , Clone , Constructor ) ]
49
106
pub struct TrackerPolicy {
50
107
// Cleanup job configuration
@@ -208,6 +265,9 @@ pub enum Error {
208
265
209
266
#[ error( "The error for errors that can never happen." ) ]
210
267
Infallible ,
268
+
269
+ #[ error( "Unsupported configuration version: {version}" ) ]
270
+ UnsupportedVersion { version : Metadata } ,
211
271
}
212
272
213
273
impl From < figment:: Error > for Error {
0 commit comments