11using System . Linq . Expressions ;
2- using Hyperbee . Collections ;
32using Hyperbee . Expressions ;
4- using Hyperbee . XS ;
53using Hyperbee . XS . Core ;
64using Hyperbee . XS . Core . Parsers ;
75using Hyperbee . XS . Core . Writer ;
@@ -17,22 +15,27 @@ public class ConfigurationParseExtension : IParseExtension, IExpressionWriter, I
1715
1816 public Parser < Expression > CreateParser ( ExtensionBinder binder )
1917 {
20- return Between (
21- Terms . Char ( '<' ) ,
22- XsParsers . TypeRuntime ( ) ,
23- Terms . Char ( '>' )
24- )
25- . And (
18+ // var mongo = config::connections.mongo;
19+ // var isSecure = config<bool>::connections.sql.secure;
20+
21+ return ZeroOrOne (
2622 Between (
27- Terms . Char ( '( ' ) ,
28- ZeroOrOne ( Terms . String ( StringLiteralQuotes . Double ) ) ,
29- Terms . Char ( ') ' )
23+ Terms . Char ( '< ' ) ,
24+ XsParsers . TypeRuntime ( ) ,
25+ Terms . Char ( '> ' )
3026 )
3127 )
28+ . AndSkip ( Terms . Text ( "::" ) )
29+ . And ( Terms . NamespaceIdentifier ( ) )
3230 . Then < Expression > ( static ( _ , parts ) =>
3331 {
3432 var ( type , key ) = parts ;
35- return ExpressionExtensions . ConfigurationValue ( type , key . ToString ( ) ) ;
33+
34+ if ( key == null )
35+ throw new InvalidOperationException ( "Key must be specified." ) ;
36+
37+ var configKey = key . ToString ( ) ! . Replace ( '.' , ':' ) ;
38+ return ExpressionExtensions . ConfigurationValue ( type ?? typeof ( string ) , configKey ) ;
3639 }
3740 )
3841 . Named ( "config" ) ;
@@ -72,13 +75,8 @@ public void WriteExpression( Expression node, XsWriterContext context )
7275
7376 if ( configurationExpression . Key != null )
7477 {
75- writer . Write ( "(" ) ;
76- writer . Write ( $ "\" { configurationExpression . Key } \" " ) ;
77- writer . Write ( ")" ) ;
78- }
79- else
80- {
81- writer . Write ( "()" ) ;
78+ writer . Write ( "::" ) ;
79+ writer . Write ( configurationExpression . Key . Replace ( ':' , '.' ) ) ;
8280 }
8381 }
8482}
0 commit comments