@@ -31,8 +31,8 @@ impl ZervDraft {
3131 self . vars . apply_context_overrides ( args) ?;
3232
3333 // Then create the Zerv object
34- let ( schema_name, schema_ron) = args. resolve_schema ( ) ;
35- let mut zerv = self . create_zerv_version ( schema_name , schema_ron ) ?;
34+ // let (schema_name, schema_ron) = args.resolve_schema();
35+ let mut zerv = self . create_zerv_version ( args ) ?;
3636
3737 // Resolve templates using the current Zerv state
3838 let resolved_args = ResolvedArgs :: resolve ( args, & zerv) ?;
@@ -44,12 +44,9 @@ impl ZervDraft {
4444 Ok ( zerv)
4545 }
4646
47- pub fn create_zerv_version (
48- self ,
49- schema_name : Option < & str > ,
50- schema_ron : Option < & str > ,
51- ) -> Result < Zerv , ZervError > {
52- // Move the logic from crate::schema::create_zerv_version here
47+ pub fn create_zerv_version ( self , args : & VersionArgs ) -> Result < Zerv , ZervError > {
48+ let schema_name = args. main . schema . as_deref ( ) ;
49+ let schema_ron = args. main . schema_ron . as_deref ( ) ;
5350 let schema = match ( schema_name, schema_ron) {
5451 // Custom RON schema
5552 ( None , Some ( ron_str) ) => parse_ron_schema ( ron_str) ?,
@@ -74,9 +71,7 @@ impl ZervDraft {
7471 if let Some ( existing_schema) = self . schema {
7572 existing_schema
7673 } else {
77- return Err ( ZervError :: MissingSchema (
78- "Either schema_name or schema_ron must be provided" . to_string ( ) ,
79- ) ) ;
74+ get_preset_schema ( "zerv-standard" , & self . vars ) . unwrap ( )
8075 }
8176 }
8277 } ;
@@ -88,19 +83,23 @@ impl ZervDraft {
8883#[ cfg( test) ]
8984mod tests {
9085 use super :: * ;
86+ use crate :: cli:: version:: args:: {
87+ MainConfig ,
88+ OverridesConfig ,
89+ VersionArgs ,
90+ } ;
91+ use crate :: version:: zerv:: bump:: precedence:: PrecedenceOrder ;
92+ use crate :: version:: zerv:: {
93+ Component ,
94+ Var ,
95+ } ;
9196
9297 #[ test]
9398 fn test_zerv_draft_creation ( ) {
9499 let vars = ZervVars :: default ( ) ;
95100 let draft = ZervDraft :: new ( vars. clone ( ) , None ) ;
96101 assert_eq ! ( draft. vars, vars) ;
97102 assert ! ( draft. schema. is_none( ) ) ;
98-
99- use crate :: version:: zerv:: bump:: precedence:: PrecedenceOrder ;
100- use crate :: version:: zerv:: {
101- Component ,
102- Var ,
103- } ;
104103 let schema = ZervSchema :: new_with_precedence (
105104 vec ! [ Component :: Var ( Var :: Major ) ] ,
106105 vec ! [ ] ,
@@ -114,11 +113,6 @@ mod tests {
114113
115114 #[ test]
116115 fn test_to_zerv_with_overrides ( ) {
117- use crate :: cli:: version:: args:: {
118- OverridesConfig ,
119- VersionArgs ,
120- } ;
121-
122116 let vars = ZervVars {
123117 major : Some ( 1 ) ,
124118 minor : Some ( 2 ) ,
@@ -152,17 +146,22 @@ mod tests {
152146 ..Default :: default ( )
153147 } ;
154148
155- // Test that create_zerv_version requires explicit schema (no default)
149+ // Test with no schema (should use default)
156150 let draft = ZervDraft :: new ( vars. clone ( ) , None ) ;
157- let result = draft . create_zerv_version ( None , None ) ;
158- assert ! ( result . is_err ( ) ) ;
159- assert ! ( matches! ( result . unwrap_err ( ) , ZervError :: MissingSchema ( _ ) ) ) ;
151+ let args = VersionArgs :: default ( ) ;
152+ let zerv = draft . create_zerv_version ( & args ) . unwrap ( ) ;
153+ assert_eq ! ( zerv . schema , ZervSchema :: zerv_standard_tier_1 ( ) ) ;
160154
161- // Test with explicit schema (should work)
155+ // Test with explicit schema
162156 let draft = ZervDraft :: new ( vars, None ) ;
163- let zerv = draft
164- . create_zerv_version ( Some ( "zerv-standard" ) , None )
165- . unwrap ( ) ;
157+ let args = VersionArgs {
158+ main : MainConfig {
159+ schema : Some ( "zerv-standard" . to_string ( ) ) ,
160+ ..Default :: default ( )
161+ } ,
162+ ..Default :: default ( )
163+ } ;
164+ let zerv = draft. create_zerv_version ( & args) . unwrap ( ) ;
166165 assert_eq ! ( zerv. schema, ZervSchema :: zerv_standard_tier_1( ) ) ;
167166 }
168167
@@ -182,7 +181,14 @@ mod tests {
182181 "# ;
183182
184183 let draft = ZervDraft :: new ( vars, None ) ;
185- let zerv = draft. create_zerv_version ( None , Some ( ron_schema) ) . unwrap ( ) ;
184+ let args = VersionArgs {
185+ main : MainConfig {
186+ schema_ron : Some ( ron_schema. to_string ( ) ) ,
187+ ..Default :: default ( )
188+ } ,
189+ ..Default :: default ( )
190+ } ;
191+ let zerv = draft. create_zerv_version ( & args) . unwrap ( ) ;
186192 assert_eq ! ( zerv. schema. core( ) . len( ) , 2 ) ;
187193 assert_eq ! ( zerv. schema. build( ) . len( ) , 1 ) ;
188194 }
@@ -192,15 +198,30 @@ mod tests {
192198 let vars = ZervVars :: default ( ) ;
193199 let ron_schema = "ZervSchema(core: [], extra_core: [], build: [], precedence_order: [])" ;
194200 let draft = ZervDraft :: new ( vars, None ) ;
195- let result = draft. create_zerv_version ( Some ( "zerv-standard" ) , Some ( ron_schema) ) ;
201+ let args = VersionArgs {
202+ main : MainConfig {
203+ schema : Some ( "zerv-standard" . to_string ( ) ) ,
204+ schema_ron : Some ( ron_schema. to_string ( ) ) ,
205+ ..Default :: default ( )
206+ } ,
207+ ..Default :: default ( )
208+ } ;
209+ let result = draft. create_zerv_version ( & args) ;
196210 assert ! ( matches!( result, Err ( ZervError :: ConflictingSchemas ( _) ) ) ) ;
197211 }
198212
199213 #[ test]
200214 fn test_unknown_schema_error ( ) {
201215 let vars = ZervVars :: default ( ) ;
202216 let draft = ZervDraft :: new ( vars, None ) ;
203- let result = draft. create_zerv_version ( Some ( "unknown" ) , None ) ;
217+ let args = VersionArgs {
218+ main : MainConfig {
219+ schema : Some ( "unknown" . to_string ( ) ) ,
220+ ..Default :: default ( )
221+ } ,
222+ ..Default :: default ( )
223+ } ;
224+ let result = draft. create_zerv_version ( & args) ;
204225 assert ! ( matches!( result, Err ( ZervError :: UnknownSchema ( _) ) ) ) ;
205226 }
206227
@@ -209,18 +230,19 @@ mod tests {
209230 let vars = ZervVars :: default ( ) ;
210231 let invalid_ron = "invalid ron syntax" ;
211232 let draft = ZervDraft :: new ( vars, None ) ;
212- let result = draft. create_zerv_version ( None , Some ( invalid_ron) ) ;
233+ let args = VersionArgs {
234+ main : MainConfig {
235+ schema_ron : Some ( invalid_ron. to_string ( ) ) ,
236+ ..Default :: default ( )
237+ } ,
238+ ..Default :: default ( )
239+ } ;
240+ let result = draft. create_zerv_version ( & args) ;
213241 assert ! ( matches!( result, Err ( ZervError :: StdinError ( _) ) ) ) ;
214242 }
215243
216244 #[ test]
217245 fn test_use_existing_schema_from_stdin ( ) {
218- use crate :: version:: zerv:: bump:: precedence:: PrecedenceOrder ;
219- use crate :: version:: zerv:: {
220- Component ,
221- Var ,
222- } ;
223-
224246 let vars = ZervVars :: default ( ) ;
225247 let existing_schema = ZervSchema :: new_with_precedence (
226248 vec ! [ Component :: Var ( Var :: Major ) ] ,
@@ -232,19 +254,15 @@ mod tests {
232254
233255 // Test using existing schema when no new schema is provided
234256 let draft = ZervDraft :: new ( vars, Some ( existing_schema) ) ;
235- let zerv = draft. create_zerv_version ( None , None ) . unwrap ( ) ;
257+ let args = VersionArgs :: default ( ) ;
258+ let zerv = draft. create_zerv_version ( & args) . unwrap ( ) ;
236259 assert_eq ! ( zerv. schema. core( ) . len( ) , 1 ) ;
237260 assert_eq ! ( zerv. schema. extra_core( ) . len( ) , 0 ) ;
238261 assert_eq ! ( zerv. schema. build( ) . len( ) , 0 ) ;
239262 }
240263
241264 #[ test]
242265 fn test_zerv_schema_structure ( ) {
243- use crate :: version:: zerv:: {
244- Component ,
245- Var ,
246- } ;
247-
248266 // Create a simple ZervVars for tier 1 (tagged, clean)
249267 let vars = ZervVars {
250268 major : Some ( 1 ) ,
@@ -256,9 +274,14 @@ mod tests {
256274 } ;
257275
258276 let draft = ZervDraft :: new ( vars, None ) ;
259- let zerv = draft
260- . create_zerv_version ( Some ( "zerv-standard" ) , None )
261- . unwrap ( ) ;
277+ let args = VersionArgs {
278+ main : MainConfig {
279+ schema : Some ( "zerv-standard" . to_string ( ) ) ,
280+ ..Default :: default ( )
281+ } ,
282+ ..Default :: default ( )
283+ } ;
284+ let zerv = draft. create_zerv_version ( & args) . unwrap ( ) ;
262285
263286 // Test the actual schema structure
264287 println ! ( "Core components: {:?}" , zerv. schema. core( ) ) ;
@@ -274,11 +297,6 @@ mod tests {
274297
275298 #[ test]
276299 fn test_zerv_ron_roundtrip_schema ( ) {
277- use crate :: version:: zerv:: {
278- Component ,
279- Var ,
280- } ;
281-
282300 let vars = ZervVars {
283301 major : Some ( 1 ) ,
284302 minor : Some ( 2 ) ,
@@ -289,9 +307,14 @@ mod tests {
289307 } ;
290308
291309 let draft = ZervDraft :: new ( vars, None ) ;
292- let original = draft
293- . create_zerv_version ( Some ( "zerv-standard" ) , None )
294- . unwrap ( ) ;
310+ let args = VersionArgs {
311+ main : MainConfig {
312+ schema : Some ( "zerv-standard" . to_string ( ) ) ,
313+ ..Default :: default ( )
314+ } ,
315+ ..Default :: default ( )
316+ } ;
317+ let original = draft. create_zerv_version ( & args) . unwrap ( ) ;
295318 let ron_string = original. to_string ( ) ;
296319 let parsed: Zerv = ron_string. parse ( ) . unwrap ( ) ;
297320
0 commit comments