@@ -3,9 +3,17 @@ use std::collections::HashMap;
33use gas:: prelude:: * ;
44use utoipa:: ToSchema ;
55
6+ #[ derive( Debug , Clone , Serialize , Deserialize , ToSchema ) ]
7+ pub struct RunnerConfig {
8+ #[ serde( flatten) ]
9+ pub kind : RunnerConfigKind ,
10+ #[ serde( default , skip_serializing_if = "Option::is_none" ) ]
11+ pub metadata : Option < serde_json:: Value > ,
12+ }
13+
614#[ derive( Debug , Clone , Serialize , Deserialize , ToSchema ) ]
715#[ serde( rename_all = "snake_case" ) ]
8- pub enum RunnerConfig {
16+ pub enum RunnerConfigKind {
917 Normal { } ,
1018 Serverless {
1119 url : String ,
@@ -19,64 +27,120 @@ pub enum RunnerConfig {
1927 } ,
2028}
2129
22- impl From < RunnerConfig > for rivet_data:: generated:: namespace_runner_config_v1 :: Data {
30+ impl From < RunnerConfig > for rivet_data:: generated:: namespace_runner_config_v2 :: RunnerConfig {
2331 fn from ( value : RunnerConfig ) -> Self {
24- match value {
25- RunnerConfig :: Normal { } => {
26- rivet_data:: generated:: namespace_runner_config_v1:: Data :: Normal (
27- rivet_data:: generated:: namespace_runner_config_v1:: Normal { } ,
28- )
29- }
30- RunnerConfig :: Serverless {
31- url,
32- headers,
33- request_lifespan,
34- slots_per_runner,
35- min_runners,
36- max_runners,
37- runners_margin,
38- } => rivet_data:: generated:: namespace_runner_config_v1:: Data :: Serverless (
39- rivet_data:: generated:: namespace_runner_config_v1:: Serverless {
32+ let RunnerConfig { kind, metadata } = value;
33+ rivet_data:: generated:: namespace_runner_config_v2:: RunnerConfig {
34+ metadata : metadata. and_then ( |value| serde_json:: to_string ( & value) . ok ( ) ) ,
35+ kind : match kind {
36+ RunnerConfigKind :: Normal { } => {
37+ rivet_data:: generated:: namespace_runner_config_v2:: RunnerConfigKind :: Normal
38+ }
39+ RunnerConfigKind :: Serverless {
4040 url,
41- headers : headers . into ( ) ,
41+ headers,
4242 request_lifespan,
4343 slots_per_runner,
4444 min_runners,
4545 max_runners,
4646 runners_margin,
47- } ,
48- ) ,
47+ } => {
48+ rivet_data:: generated:: namespace_runner_config_v2:: RunnerConfigKind :: Serverless (
49+ rivet_data:: generated:: namespace_runner_config_v2:: Serverless {
50+ url,
51+ headers : headers. into ( ) ,
52+ request_lifespan,
53+ slots_per_runner,
54+ min_runners,
55+ max_runners,
56+ runners_margin,
57+ } ,
58+ )
59+ }
60+ } ,
4961 }
5062 }
5163}
5264
53- impl From < rivet_data:: generated:: namespace_runner_config_v1:: Data > for RunnerConfig {
54- fn from ( value : rivet_data:: generated:: namespace_runner_config_v1:: Data ) -> Self {
55- match value {
56- rivet_data:: generated:: namespace_runner_config_v1:: Data :: Normal ( _) => {
57- RunnerConfig :: Normal { }
58- }
59- rivet_data:: generated:: namespace_runner_config_v1:: Data :: Serverless ( o) => {
60- RunnerConfig :: Serverless {
65+ impl From < rivet_data:: generated:: namespace_runner_config_v2:: RunnerConfig > for RunnerConfig {
66+ fn from ( value : rivet_data:: generated:: namespace_runner_config_v2:: RunnerConfig ) -> Self {
67+ let rivet_data:: generated:: namespace_runner_config_v2:: RunnerConfig { metadata, kind } =
68+ value;
69+ RunnerConfig {
70+ metadata : metadata. and_then ( |raw| serde_json:: from_str ( & raw ) . ok ( ) ) ,
71+ kind : match kind {
72+ rivet_data:: generated:: namespace_runner_config_v2:: RunnerConfigKind :: Normal => {
73+ RunnerConfigKind :: Normal { }
74+ }
75+ rivet_data:: generated:: namespace_runner_config_v2:: RunnerConfigKind :: Serverless (
76+ o,
77+ ) => RunnerConfigKind :: Serverless {
6178 url : o. url ,
6279 headers : o. headers . into ( ) ,
6380 request_lifespan : o. request_lifespan ,
6481 slots_per_runner : o. slots_per_runner ,
6582 min_runners : o. min_runners ,
6683 max_runners : o. max_runners ,
6784 runners_margin : o. runners_margin ,
68- }
69- }
85+ } ,
86+ } ,
7087 }
7188 }
7289}
7390
91+ // impl From<RunnerConfig> for rivet_data::generated::namespace_runner_config_v1::Data {
92+ // fn from(value: RunnerConfig) -> Self {
93+ // match value.kind {
94+ // RunnerConfigKind::Normal { .. } => {
95+ // unreachable!("Normal runner configs do not have a v1 representation",)
96+ // }
97+ // RunnerConfigKind::Serverless {
98+ // url,
99+ // headers,
100+ // request_lifespan,
101+ // slots_per_runner,
102+ // min_runners,
103+ // max_runners,
104+ // runners_margin,
105+ // } => rivet_data::generated::namespace_runner_config_v1::Data::Serverless(
106+ // rivet_data::generated::namespace_runner_config_v1::Serverless {
107+ // url,
108+ // headers: headers.into(),
109+ // request_lifespan,
110+ // slots_per_runner,
111+ // min_runners,
112+ // max_runners,
113+ // runners_margin,
114+ // },
115+ // ),
116+ // }
117+ // }
118+ // }
119+ //
120+ // impl From<rivet_data::generated::namespace_runner_config_v1::Data> for RunnerConfig {
121+ // fn from(value: rivet_data::generated::namespace_runner_config_v1::Data) -> Self {
122+ // RunnerConfig {
123+ // metadata: None,
124+ // kind: match value {
125+ // rivet_data::generated::namespace_runner_config_v1::Data::Serverless(o) => {
126+ // RunnerConfigKind::Serverless {
127+ // url: o.url,
128+ // headers: o.headers.into(),
129+ // request_lifespan: o.request_lifespan,
130+ // slots_per_runner: o.slots_per_runner,
131+ // min_runners: o.min_runners,
132+ // max_runners: o.max_runners,
133+ // runners_margin: o.runners_margin,
134+ // }
135+ // }
136+ // },
137+ // }
138+ // }
139+ // }
140+
74141impl RunnerConfig {
75142 /// If updates to this run config affects the autoscaler.
76143 pub fn affects_autoscaler ( & self ) -> bool {
77- match self {
78- Self :: Serverless { .. } => true ,
79- Self :: Normal { .. } => false ,
80- }
144+ matches ! ( self . kind, RunnerConfigKind :: Serverless { .. } )
81145 }
82146}
0 commit comments