private bool GetEnv(NodeEvent node, IParser reader, Type expectedType, Func <IParser, Type, object> nestedObjectDeserializer, out object value) { if (node is Scalar scalar) { // deserialize single parameter INodeDeserializer nested = new ScalarNodeDeserializer(); if (nested.Deserialize(reader, expectedType, nestedObjectDeserializer, out value) && (value is string key)) { value = Environment.GetEnvironmentVariable(key); return(true); } } else { LogError("invalid expression for !GetEnv", null); } value = null; return(false); }
private bool GetParam(NodeEvent node, IParser reader, Type expectedType, Func <IParser, Type, object> nestedObjectDeserializer, out object value) { if (node is Scalar scalar) { // NOTE: !GetParam parameterKey // deserialize single parameter INodeDeserializer nested = new ScalarNodeDeserializer(); if ( nested.Deserialize(reader, expectedType, nestedObjectDeserializer, out var tagValue) && (tagValue is string parameterKey) ) { if (Dictionary.TryGetValue(parameterKey, out var parameterValue)) { // substitute expression with parameter value value = parameterValue; } else { // record missing parameter key Dictionary[parameterKey] = null; value = null; } return(true); } } else if (node is SequenceStart sequenceStart) { // NOTE: !GetParam [ parameterKey, encryptionKey ] // deserialize parameter list INodeDeserializer nested = new CollectionNodeDeserializer(new DefaultObjectFactory()); if ( nested.Deserialize(reader, expectedType, nestedObjectDeserializer, out var tagValue) && (tagValue is IList list) ) { if (list.Count == 1) { if (list[0] is string parameterKey) { if (Dictionary.TryGetValue(parameterKey, out var parameterValue)) { // substitute expression with parameter value value = parameterValue; } else { // record missing parameter key Dictionary[parameterKey] = null; value = null; } return(true); } else { LogError("invalid expression for !GetParam [ parameterKey ]", null); } } else if (list.Count == 2) { if ( (list[0] is string parameterKey) && (list[1] is string encryptionKey) ) { if (Dictionary.TryGetValue(parameterKey, out var parameterValue)) { // substitute expression with parameter value value = parameterValue; } else { // record missing parameter key Dictionary[parameterKey] = null; Encryption[parameterKey] = encryptionKey; value = null; } return(true); } else { LogError("invalid expression for !GetParam [ parameterKey, encryptionKey ]", null); } } } else { LogError("!GetParam must be followed by either a list or a string", null); } }
public WidthConverter() { arrayNodeDeserializer = new ArrayNodeDeserializer(); scalarNodeDeserializer = new ScalarNodeDeserializer(); }
//--- Methods --- public bool Deserialize(IParser reader, Type expectedType, Func <IParser, Type, object> nestedObjectDeserializer, out object value) { if (reader.Current is NodeEvent node) { switch (node.Tag) { case "!GetConfig": { if (node is SequenceStart sequenceStart) { // deserialize single parameter INodeDeserializer nested = new CollectionNodeDeserializer(new DefaultObjectFactory()); if ( nested.Deserialize(reader, expectedType, nestedObjectDeserializer, out value) && (value is IList list) && (list.Count == 2) && (list[0] is string sourceFile) && (list[1] is string key) ) { if (!_configFiles.TryGetValue(sourceFile, out var configFile)) { try { configFile = JObject.Parse(File.ReadAllText(Path.Combine(_workingDirectory, sourceFile))); _configFiles[sourceFile] = configFile; } catch (FileNotFoundException) { LogError($"unable to load json config file '{configFile}'", null); value = null; return(true); } } try { value = configFile.SelectToken(key)?.Value <string>(); } catch (Exception e) { LogError($"!GetConfig has invalid JSON-path expression: '{key}'", e); value = null; return(true); } if (value == null) { LogError($"!GetConfig unable to find '{key}' in file '{sourceFile}'", null); return(true); } return(true); } } } break; case "!GetEnv": { if (node is Scalar scalar) { // deserialize single parameter INodeDeserializer nested = new ScalarNodeDeserializer(); if (nested.Deserialize(reader, expectedType, nestedObjectDeserializer, out value) && (value is string key)) { value = Environment.GetEnvironmentVariable(key); return(true); } } } break; case "!GetParam": { if (node is Scalar scalar) { // deserialize single parameter INodeDeserializer nested = new ScalarNodeDeserializer(); if (nested.Deserialize(reader, expectedType, nestedObjectDeserializer, out value) && (value is string key)) { if (Dictionary.TryGetValue(key, out var parameterValue)) { // substitute expression with parameter value value = parameterValue; } else { // record missing parameter key Dictionary[key] = null; value = null; } return(true); } } } break; } } value = null; return(false); }