/// <summary> /// Converts a RAPID pro schema definition language file (.rsdl) to a CSDL file /// </summary> /// <param name="path">file path of input file to parse</param> /// <param name="format">indicates whether it should be written as XML or JSON CSDL, or OpenAPI</param> public async Task <bool> Convert(string path, OutputFormat format) { // create parser and model transformer. var parser = new RdmParser(logger); var transformer = new ModelTransformer(logger); // the model transformer has no ability to parse itself, so do the parsing upfront and // pass in the models (main and dependencies) // load main model file var model = ParseFile(parser, path); if (model == null) { return(false); } // load referenced models var referencedModels = model.References.ToDictionary( reference => reference.Alias, reference => LoadModel(reference.Path, parser, Path.GetDirectoryName(path))); // transform into CSDL if (transformer.TryTransform(model, referencedModels, out var csdlModel)) { return(await WriteOutputToFile(csdlModel, path, format)); } else { return(false); } }
/// <summary> /// Converts a RAPID pro schema definition language file (.rsdl) to a CSDL file /// </summary> /// <param name="inputRsdl">reader to read the RSDL to parse</param> /// <param name="output">stream to write the output to</param> /// <param name="format">indicates whether it should be written as XML or JSON CSDL, or OpenAPI</param> /// <param name="modelName">the name of the model being converted</param> public async Task <bool> Convert(TextReader inputRsdl, Stream output, OutputFormat format, string modelName = "RapidModel") { // create parser and model transformer. RdmDataModel model; var parser = new RdmParser(logger); try { var rsdl = await inputRsdl.ReadToEndAsync(); model = parser.Parse(rsdl, modelName); } catch (Exception ex) { logger.LogError(ex, $"error parsing rsdl stream"); return(false); } // todo: Load referenced EDM models // transform into CSDL var transformer = new ModelTransformer(logger); if (transformer.TryTransform(model, null, out var csdlModel)) { return(await WriteOutput(csdlModel, output, format)); } else { return(false); } }
private rdm.RdmDataModel ParseFile(RdmParser parser, string path) { try { var content = File.ReadAllText(path); var model = parser.Parse(content, Path.GetFileName(path)); return(model); } catch (Exception ex) { logger.LogError(ex, $"error parsing rsdl file {path}"); return(default);
private RdmDataModel LoadModel(string path, RdmParser parser, string baseDirectory) { if (!Path.IsPathRooted(path)) { path = Path.Combine(baseDirectory, path); } if (Path.GetExtension(path) == "") { path = path + ".rsdl"; } ; var model = parser.Parse(File.ReadAllText(path), Path.GetFileName(path)); logger.LogInfo("loaded referenced model file {0} containing namespace {1}", path, model.Namespace.NamespaceName); return(model); }