@@ -6,6 +6,15 @@ use crate::{Provider, Repository, SystemModel, dependency, repository};
66pub fn decode ( content : & str ) -> Result < SystemModel , Error > {
77 let document: KdlDocument = content. parse ( ) . map_err ( Error :: ParseKdlDocument ) ?;
88
9+ let disable_warning = document
10+ . get_arg ( "disable_warning" )
11+ . map ( |value| {
12+ value
13+ . as_bool ( )
14+ . ok_or ( Error :: InvalidRootValue ( "disable_warning" , "bool" , value. to_string ( ) ) )
15+ } )
16+ . transpose ( ) ?;
17+
918 let packages = document
1019 . get ( "packages" )
1120 . map ( |node| node. iter_children ( ) . map ( decode_package) . collect :: < Result < _ , _ > > ( ) )
@@ -19,6 +28,7 @@ pub fn decode(content: &str) -> Result<SystemModel, Error> {
1928 . unwrap_or_default ( ) ;
2029
2130 Ok ( SystemModel {
31+ disable_warning : disable_warning. unwrap_or_default ( ) ,
2232 repositories,
2333 packages,
2434 encoded : content. to_owned ( ) ,
@@ -35,7 +45,7 @@ fn decode_repository(node: &KdlNode) -> Result<(repository::Id, Repository), Err
3545
3646 let description = get_child_value ( node, "description" )
3747 . map ( |value| {
38- value. as_string ( ) . ok_or ( Error :: InvalidValue (
48+ value. as_string ( ) . ok_or ( Error :: InvalidNodeValue (
3949 "repository" ,
4050 name. to_owned ( ) ,
4151 "description" ,
@@ -47,7 +57,7 @@ fn decode_repository(node: &KdlNode) -> Result<(repository::Id, Repository), Err
4757 . unwrap_or_default ( ) ;
4858 let uri = get_child_value ( node, "uri" )
4959 . map ( |value| {
50- value. as_string ( ) . ok_or ( Error :: InvalidValue (
60+ value. as_string ( ) . ok_or ( Error :: InvalidNodeValue (
5161 "repository" ,
5262 name. to_owned ( ) ,
5363 "uri" ,
@@ -61,7 +71,7 @@ fn decode_repository(node: &KdlNode) -> Result<(repository::Id, Repository), Err
6171 . map_err ( |err| Error :: ParseRepositoryUri ( err, name. to_owned ( ) ) ) ?;
6272 let enabled = get_child_value ( node, "enabled" )
6373 . map ( |value| {
64- value. as_bool ( ) . ok_or ( Error :: InvalidValue (
74+ value. as_bool ( ) . ok_or ( Error :: InvalidNodeValue (
6575 "repository" ,
6676 name. to_owned ( ) ,
6777 "uri" ,
@@ -73,7 +83,7 @@ fn decode_repository(node: &KdlNode) -> Result<(repository::Id, Repository), Err
7383 . unwrap_or ( true ) ;
7484 let priority = get_child_value ( node, "priority" )
7585 . map ( |value| {
76- let int = value. as_integer ( ) . ok_or ( Error :: InvalidValue (
86+ let int = value. as_integer ( ) . ok_or ( Error :: InvalidNodeValue (
7787 "repository" ,
7888 name. to_owned ( ) ,
7989 "priority" ,
@@ -106,8 +116,10 @@ fn get_child_value<'a>(node: &'a KdlNode, name: &str) -> Option<&'a KdlValue> {
106116
107117#[ derive( Debug , Error ) ]
108118pub enum Error {
119+ #[ error( "invalid value for {0}, expected {1} got {2}" ) ]
120+ InvalidRootValue ( & ' static str , & ' static str , String ) ,
109121 #[ error( "invalid value for {0} {1} {2}, expected {3} got {4}" ) ]
110- InvalidValue ( & ' static str , String , & ' static str , & ' static str , String ) ,
122+ InvalidNodeValue ( & ' static str , String , & ' static str , & ' static str , String ) ,
111123 #[ error( "missing {0} for {1} {2}" ) ]
112124 MissingValue ( & ' static str , & ' static str , String ) ,
113125 #[ error( "parse as kdl document" ) ]
0 commit comments