@@ -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,15 +27,74 @@ pub enum RunnerConfig {
1927 } ,
2028}
2129
30+ impl From < RunnerConfig > for rivet_data:: generated:: namespace_runner_config_v2:: RunnerConfig {
31+ fn from ( value : RunnerConfig ) -> Self {
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 {
40+ url,
41+ headers,
42+ request_lifespan,
43+ slots_per_runner,
44+ min_runners,
45+ max_runners,
46+ runners_margin,
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+ } ,
61+ }
62+ }
63+ }
64+
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 {
78+ url : o. url ,
79+ headers : o. headers . into ( ) ,
80+ request_lifespan : o. request_lifespan ,
81+ slots_per_runner : o. slots_per_runner ,
82+ min_runners : o. min_runners ,
83+ max_runners : o. max_runners ,
84+ runners_margin : o. runners_margin ,
85+ } ,
86+ } ,
87+ }
88+ }
89+ }
90+
2291impl From < RunnerConfig > for rivet_data:: generated:: namespace_runner_config_v1:: Data {
2392 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- )
93+ match value. kind {
94+ RunnerConfigKind :: Normal { .. } => {
95+ unreachable ! ( "Normal runner configs do not have a v1 representation" , )
2996 }
30- RunnerConfig :: Serverless {
97+ RunnerConfigKind :: Serverless {
3198 url,
3299 headers,
33100 request_lifespan,
@@ -52,31 +119,28 @@ impl From<RunnerConfig> for rivet_data::generated::namespace_runner_config_v1::D
52119
53120impl From < rivet_data:: generated:: namespace_runner_config_v1:: Data > for RunnerConfig {
54121 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 {
61- url : o. url ,
62- headers : o. headers . into ( ) ,
63- request_lifespan : o. request_lifespan ,
64- slots_per_runner : o. slots_per_runner ,
65- min_runners : o. min_runners ,
66- max_runners : o. max_runners ,
67- runners_margin : o . runners_margin ,
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+ }
68135 }
69- }
136+ } ,
70137 }
71138 }
72139}
73140
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