public IList <SDKConfig> GetSDKs() { if (_table.TryGetValue(Property_SDKs, out var sdksValue)) { var values = sdksValue.AsList(); var result = new List <SDKConfig>(); foreach (var value in values) { result.Add(new SDKConfig((ValueTable)value.AsTable())); } return(result); } else { throw new InvalidOperationException("No SDKs."); } }
/// <summary> /// Generate the collection of build extensions /// </summary> private IList <Path> GenerateBuildExtensionSet( Recipe recipe, ValueTable dependenciesSharedState) { var buildExtensionLibraries = new List <Path>(); // Run the RecipeBuild extension to inject core build tasks var recipeBuildExtensionPath = new Path(); var language = recipe.Language; if (language == "C++") { var moduleFolder = new Path(Assembly.GetExecutingAssembly().Location).GetParent(); recipeBuildExtensionPath = moduleFolder + new Path("Extensions/Soup.Cpp/Soup.Cpp.dll"); } else if (language == "C#") { var moduleFolder = new Path(Assembly.GetExecutingAssembly().Location).GetParent(); recipeBuildExtensionPath = moduleFolder + new Path("Extensions/Soup.CSharp/Soup.CSharp.dll"); } else { throw new InvalidOperationException("Unknown language."); } buildExtensionLibraries.Add(recipeBuildExtensionPath); // Check for any dynamic libraries in the shared state if (dependenciesSharedState.TryGetValue("Build", out var buildDependenciesValue)) { foreach (var dependencyValue in buildDependenciesValue.AsTable()) { var dependency = dependencyValue.Value.AsTable(); if (dependency.TryGetValue("Build", out var buildTableValue)) { var buildTable = buildTableValue.AsTable(); if (buildTable.TryGetValue("TargetFile", out var targetFileValue)) { var targetFile = new Path(targetFileValue.AsString().ToString()); buildExtensionLibraries.Add(targetFile); } else { Log.Warning("Found build dependency with no target file."); } } else { Log.Warning("Found build dependency with no build table."); } } } return(buildExtensionLibraries); }
private ValueTable GetTable(ValueTable table, string key, bool createTableArrayItem) { if (table.TryGetValue(key, out var subTableObject)) { if (subTableObject.Type == ValueType.List) { var tomlArray = subTableObject.AsList(); if (createTableArrayItem) { var newTableForArray = new Value(new ValueTable()); tomlArray.Add(newTableForArray); subTableObject = newTableForArray; } else { subTableObject = tomlArray[tomlArray.Count - 1]; } } if (!(subTableObject.Type == ValueType.Table)) { throw new InvalidOperationException($"Cannot transform the key `{key}` to a table while the existing underlying object is a `{subTableObject.GetType()}"); } return((ValueTable)subTableObject.AsTable()); } var newTable = new ValueTable(); if (createTableArrayItem) { table[key] = new Value(new ValueList(new List <Value>() { new Value(newTable), })); } else { table[key] = new Value(newTable); } return(newTable); }
public void SetProperties(IDictionary <string, string> value) { ValueTable?values; if (_table.TryGetValue(Property_Properties, out var propertiesValues)) { values = (ValueTable)propertiesValues.AsTable(); } else { var newTableSyntax = new InlineTableSyntax() { OpenBrace = SyntaxFactory.Token(TokenKind.OpenBrace), CloseBrace = SyntaxFactory.Token(TokenKind.CloseBrace), }; values = new ValueTable() { MirrorSyntax = newTableSyntax, }; _table[Property_Properties] = new Value(values); // Add the new syntax to the parent table syntax switch (_table.MirrorSyntax) { case TableSyntaxBase tableSyntax: tableSyntax.Items.Add(new KeyValueSyntax(Property_Properties, newTableSyntax)); break; default: throw new InvalidOperationException("Unknown Syntax on ValueTable"); } } // Add the new syntax to the parent table syntax // values.(); switch (values.MirrorSyntax) { case InlineTableSyntax tableSyntax: // Replace all items while (tableSyntax.Items.ChildrenCount > 0) { tableSyntax.Items.RemoveChildrenAt(0); } var index = 0; foreach (var item in value) { bool isLastItem = index == value.Keys.Count - 1; var equalToken = SyntaxFactory.Token(TokenKind.Equal); equalToken.AddLeadingWhitespace(); equalToken.AddTrailingWhitespace(); var newKeyValue = new KeyValueSyntax() { Key = new KeySyntax(item.Key), EqualToken = equalToken, Value = new StringValueSyntax(item.Value), }; var newInlineTableItem = new InlineTableItemSyntax(newKeyValue) { }; if (!isLastItem) { newInlineTableItem.Comma = SyntaxFactory.Token(TokenKind.Comma); } // newInlineTableItem.LeadingTrivia = new List<SyntaxTrivia>() { SyntaxFactory.Whitespace() }; tableSyntax.Items.Add(newInlineTableItem); index++; } break; default: throw new InvalidOperationException("Unknown Syntax on ValueList"); } }