using System.Text.Json; namespace Speckle.Automate.Sdk.Schema; public static class FunctionRunDataParser { private static readonly JsonSerializerOptions s_jsonSerializerSettings = new() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, }; /// /// Function run data parser from json file path./> /// /// Path to retrieve function run data. /// Type for function inputs. /// The data to be able to run function. /// Json was not valid /// Throws unless file exists. public static FunctionRunData FromPath(string inputLocation) { string inputJsonString = ReadInputData(inputLocation); //It's important to use System.Text.Json here. The template FunctionInputs are decorated with STJ attributes FunctionRunData? functionRunData = JsonSerializer.Deserialize>( inputJsonString, s_jsonSerializerSettings ); if (functionRunData is null) { throw new JsonException($"Function run data couldn't deserialized at {inputLocation}"); } return functionRunData; } /// /// Read text from file. /// /// Path to check file is exist. /// Text in file. /// Throws unless file exists. private static string ReadInputData(string inputLocation) { if (!File.Exists(inputLocation)) { throw new FileNotFoundException($"Cannot find the function inputs file at {inputLocation}"); } return File.ReadAllText(inputLocation); } }