public override ExecutionResult Run(string input, IChannel channel) { var parts = input.Trim().Split(" ", 2); var command = parts[0]; if (command.Trim() == "--save") { if (NoiseModelSource.NoiseModel == null) { channel.Stderr("No noise model set; nothing to save."); } else { var filename = parts[1]; File.WriteAllText(filename, JsonSerializer.Serialize(NoiseModelSource.NoiseModel)); } } else if (command.Trim() == "--load") { var filename = parts[1]; NoiseModelSource.NoiseModel = JsonSerializer.Deserialize <NoiseModel>(File.ReadAllText(filename)); } else if (command.Trim() == "--get-by-name") { var name = parts[1]; if (NoiseModel.TryGetByName(name, out var noiseModel)) { return(noiseModel.ToExecutionResult()); } else { return($"No built-in noise model with name {name}.".ToExecutionResult(ExecuteStatus.Error)); } } else if (command.Trim() == "--load-by-name") { var name = parts[1]; if (NoiseModel.TryGetByName(name, out var noiseModel)) { NoiseModelSource.NoiseModel = noiseModel; } else { return($"No built-in noise model with name {name}.".ToExecutionResult(ExecuteStatus.Error)); } } else if (input.Trim().StartsWith("{")) { // Parse the input as JSON. NoiseModelSource.NoiseModel = JsonSerializer.Deserialize <NoiseModel>(input.Trim()); } else { // Just return the existing noise model. return(NoiseModelSource.NoiseModel.ToExecutionResult()); } return(ExecuteStatus.Ok.ToExecutionResult()); }
public static void SetNoiseModel(ulong simId, NoiseModel noiseModel) { LogCall("set_noise_model"); string?jsonData = null; try { jsonData = JsonSerializer.Serialize(noiseModel); CheckCall(_SetNoiseModel(simId, jsonData)); } catch (NotSupportedException ex) { throw new ArgumentException("Could not serialize noise model to JSON, as no suitable serializer was found.", ex); } catch (JsonException ex) { throw new Exception($"Could not serialize noise model: {ex.Message}", ex); } catch (SimulationException ex) { throw new Exception($"Could not set noise model from JSON: {ex.Message}\nJSON data:\n{jsonData}", ex); } }