schema_salad.cpp_codegen

C++17 code generator for a given Schema Salad definition.

Currently only supports emiting YAML from the C++ objects, not yet parsing YAML into C++ objects.

The generated code requires the libyaml-cpp library & headers

To see an example of usage, look at schema_salad/tests/codegen/cwl.cpp which can be combined with the CWL V1.0 schema as shown below:

schema-salad-tool --codegen cpp           schema_salad/tests/test_schema/CommonWorkflowLanguage.yml           > cwl_v1_0.h

g++ --std=c++20 -I. -lyaml-cpp schema_salad/tests/codegen/cwl.cpp -o cwl-v1_0-test
./cwl-v1_0-test

# g++ versions older than version 10 may need "--std=c++2a" instead of "--std=c++20"

Module Contents

Classes

ClassDefinition

FieldDefinition

EnumDefinition

CppCodeGen

Generation of C++ code for a given Schema Salad definition.

Functions

replaceKeywords(s)

Rename keywords that are reserved in C++.

safename(name)

Create a C++ safe name.

safename2(name)

Create a namespaced safename.

split_name(s)

split_field(s)

isPrimitiveType(v)

hasFieldValue(e, f, v)

isRecordSchema(v)

isEnumSchema(v)

isArray(v)

pred(i)

isArraySchema(v)

schema_salad.cpp_codegen.replaceKeywords(s)

Rename keywords that are reserved in C++.

Parameters:

s (str) –

Return type:

str

schema_salad.cpp_codegen.safename(name)

Create a C++ safe name.

Parameters:

name (str) –

Return type:

str

schema_salad.cpp_codegen.safename2(name)

Create a namespaced safename.

Parameters:

name (Dict[str, str]) –

Return type:

str

schema_salad.cpp_codegen.split_name(s)
Parameters:

s (str) –

Return type:

Tuple[str, str]

schema_salad.cpp_codegen.split_field(s)
Parameters:

s (str) –

Return type:

Tuple[str, str, str]

class schema_salad.cpp_codegen.ClassDefinition(name)
Parameters:

name (str) –

writeFwdDeclaration(target, fullInd, ind)
Parameters:
  • target (IO[str]) –

  • fullInd (str) –

  • ind (str) –

Return type:

None

writeDefinition(target, fullInd, ind)
Parameters:
  • target (IO[Any]) –

  • fullInd (str) –

  • ind (str) –

Return type:

None

writeImplDefinition(target, fullInd, ind)
Parameters:
  • target (IO[str]) –

  • fullInd (str) –

  • ind (str) –

Return type:

None

class schema_salad.cpp_codegen.FieldDefinition(name, typeStr, optional)
Parameters:
  • name (str) –

  • typeStr (str) –

  • optional (bool) –

writeDefinition(target, fullInd, ind, namespace)

Write a C++ definition for the class field.

Parameters:
  • target (IO[Any]) –

  • fullInd (str) –

  • ind (str) –

  • namespace (str) –

Return type:

None

class schema_salad.cpp_codegen.EnumDefinition(name, values)
Parameters:
  • name (str) –

  • values (List[str]) –

writeDefinition(target, ind)
Parameters:
  • target (IO[str]) –

  • ind (str) –

Return type:

None

schema_salad.cpp_codegen.isPrimitiveType(v)
Parameters:

v (Any) –

Return type:

bool

schema_salad.cpp_codegen.hasFieldValue(e, f, v)
Parameters:
  • e (Any) –

  • f (str) –

  • v (Any) –

Return type:

bool

schema_salad.cpp_codegen.isRecordSchema(v)
Parameters:

v (Any) –

Return type:

bool

schema_salad.cpp_codegen.isEnumSchema(v)
Parameters:

v (Any) –

Return type:

bool

schema_salad.cpp_codegen.isArray(v)
Parameters:

v (Any) –

Return type:

bool

schema_salad.cpp_codegen.pred(i)
Parameters:

i (Any) –

Return type:

bool

schema_salad.cpp_codegen.isArraySchema(v)
Parameters:

v (Any) –

Return type:

bool

class schema_salad.cpp_codegen.CppCodeGen(base, target, examples, package, copyright)

Bases: schema_salad.codegen_base.CodeGenBase

digraph inheritanceb32d88fe87 { bgcolor=transparent; rankdir=LR; size="8.0, 12.0"; "CodeGenBase" [URL="../codegen_base/index.html#schema_salad.codegen_base.CodeGenBase",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Abstract base class for schema salad code generators."]; "CppCodeGen" [URL="#schema_salad.cpp_codegen.CppCodeGen",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Generation of C++ code for a given Schema Salad definition."]; "CodeGenBase" -> "CppCodeGen" [arrowsize=0.5,style="setlinewidth(0.5)"]; }

Generation of C++ code for a given Schema Salad definition.

Parameters:
  • base (str) –

  • target (IO[str]) –

  • examples (Optional[str]) –

  • package (str) –

  • copyright (Optional[str]) –

convertTypeToCpp(type_declaration)

Convert a Schema Salad type to a C++ type.

Parameters:

type_declaration (Union[List[Any], Dict[str, Any], str]) –

Return type:

str

epilogue(root_loader)

Trigger to generate the epilouge code.

Parameters:

root_loader (Optional[schema_salad.codegen_base.TypeDef]) –

Return type:

None

parseRecordField(field)
Parameters:

field (Dict[str, Any]) –

Return type:

FieldDefinition

parseRecordSchema(stype)
Parameters:

stype (Dict[str, Any]) –

Return type:

None

parseEnum(stype)
Parameters:

stype (Dict[str, Any]) –

Return type:

str

parse(items)
Parameters:

items (List[Dict[str, Any]]) –

Return type:

None