Skip to content
This repository has been archived by the owner on Aug 20, 2021. It is now read-only.

Workaround for profile metaschema discrepancies #40

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions metaschema/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"text/template"

"github.com/iancoleman/strcase"
"github.com/jinzhu/inflection"
wordwrap "github.com/mitchellh/go-wordwrap"
)

Expand Down Expand Up @@ -37,6 +38,7 @@ func GenerateTypes(metaschema *Metaschema) error {
"toLower": strings.ToLower,
"toCamel": strcase.ToCamel,
"toLowerCamel": strcase.ToLowerCamel,
"plural": inflection.Plural,
"wrapString": wrapString,
"parseDatatype": parseDatatype,
"commentFlag": commentFlag,
Expand Down
11 changes: 7 additions & 4 deletions metaschema/types.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ type {{toCamel .Name}} struct {
{{if or (eq "catalog" .Name) (eq "profile" .Name) (eq "declarations" .Name)}}
XMLName xml.Name `xml:"http://csrc.nist.gov/ns/oscal/1.0 {{ .Name }}" json:"-"`
{{- end}}
{{- if eq "profile" .Name}}
ID string `xml:"id,attr,omitempty" json:"id,omitempty"`
{{- end}}
{{- range .Flags}}
{{- $cf := commentFlag .Name $m.DefineFlag}}
{{- range $cf}}
Expand All @@ -27,15 +30,15 @@ type {{toCamel .Name}} struct {
{{- end}}

{{- range .Model.Fields}}
{{toCamel .GroupAs}} []{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .GroupAs}},omitempty"`
{{toCamel .GroupAs}} []{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{plural .Named}},omitempty"`
{{- end}}

{{- range .Model.Assembly}}
{{toCamel .Named}} *{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"`
{{- end}}

{{- range .Model.Assemblies}}
{{toCamel .GroupAs}} []{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .GroupAs}},omitempty"`
{{toCamel .GroupAs}} []{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{plural .Named}},omitempty"`
{{- end}}

{{- range .Model.Choice}}
Expand All @@ -44,15 +47,15 @@ type {{toCamel .Name}} struct {
{{- end}}

{{- range .Fields}}
{{toCamel .GroupAs}} []{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .GroupAs}},omitempty"`
{{toCamel .GroupAs}} []{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{plural .Named}},omitempty"`
{{- end}}

{{- range .Assembly}}
{{toCamel .Named}} *{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .Named}},omitempty"`
{{- end}}

{{- range .Assemblies}}
{{toCamel .GroupAs}} []{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{toLowerCamel .GroupAs}},omitempty"`
{{toCamel .GroupAs}} []{{packageImport .Named $m}}{{toCamel .Named}} `xml:"{{ .Named }},omitempty" json:"{{plural .Named}},omitempty"`
{{- end}}
{{- end}}

Expand Down
6 changes: 3 additions & 3 deletions types/oscal/catalog/catalog.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,10 @@ type Param struct {
// Another parameter invoking this one
DependsOn string `xml:"depends-on,attr,omitempty" json:"dependsOn,omitempty"`
Label Label `xml:"label,omitempty" json:"label,omitempty"`
Descriptions []Desc `xml:"desc,omitempty" json:"descriptions,omitempty"`
Descriptions []Desc `xml:"desc,omitempty" json:"descs,omitempty"`
Constraints []Constraint `xml:"constraint,omitempty" json:"constraints,omitempty"`
Links []Link `xml:"link,omitempty" json:"links,omitempty"`
Guidance []Guideline `xml:"guideline,omitempty" json:"guidance,omitempty"`
Guidance []Guideline `xml:"guideline,omitempty" json:"guidelines,omitempty"`
Value Value `xml:"value,omitempty" json:"value,omitempty"`
Select *Select `xml:"select,omitempty" json:"select,omitempty"`
}
Expand All @@ -110,7 +110,7 @@ type Select struct {

// When selecting, a requirement such as one or more
HowMany string `xml:"how-many,attr,omitempty" json:"howMany,omitempty"`
Alternatives []Choice `xml:"choice,omitempty" json:"alternatives,omitempty"`
Alternatives []Choice `xml:"choice,omitempty" json:"choices,omitempty"`
}

// A partition or component of a control, subcontrol or part
Expand Down
27 changes: 11 additions & 16 deletions types/oscal/profile/profile.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import (

// Each OSCAL profile is defined by a Profile element
type Profile struct {
ID string `xml:"id,attr,omitempty" json:"id,omitempty"`
anweiss marked this conversation as resolved.
Show resolved Hide resolved
XMLName xml.Name `xml:"http://csrc.nist.gov/ns/oscal/1.0 profile" json:"-"`
ID string `xml:"id,attr,omitempty" json:"id,omitempty"`
Merge *Merge `xml:"merge,omitempty" json:"merge,omitempty"`
Modify *Modify `xml:"modify,omitempty" json:"modify,omitempty"`
Imports []Import `xml:"import,omitempty" json:"imports,omitempty"`
Expand All @@ -34,45 +34,45 @@ type Merge struct {
// resolution.
type Custom struct {
IdSelectors []Call `xml:"call,omitempty" json:"calls,omitempty"`
PatternSelectors []Match `xml:"match,omitempty" json:"patternSelectors,omitempty"`
PatternSelectors []Match `xml:"match,omitempty" json:"matches,omitempty"`
Groups []Group `xml:"group,omitempty" json:"groups,omitempty"`
}

// As in catalogs, a group of (selected) controls or of groups of controls
type Group struct {
Groups []Group `xml:"group,omitempty" json:"groups,omitempty"`
IdSelectors []Call `xml:"call,omitempty" json:"calls,omitempty"`
PatternSelectors []Match `xml:"match,omitempty" json:"patternSelectors,omitempty"`
PatternSelectors []Match `xml:"match,omitempty" json:"matches,omitempty"`
}

// Set parameters or amend controls in resolution
type Modify struct {
ParamSettings []SetParam `xml:"set-param,omitempty" json:"paramSettings,omitempty"`
Alterations []Alter `xml:"alter,omitempty" json:"alterations,omitempty"`
ParamSettings []SetParam `xml:"set-param,omitempty" json:"set-params,omitempty"`
Alterations []Alter `xml:"alter,omitempty" json:"alters,omitempty"`
}

// Specifies which controls and subcontrols to include from the resource (source
// catalog) being imported
type Include struct {
All *All `xml:"all,omitempty" json:"all,omitempty"`
IdSelectors []Call `xml:"call,omitempty" json:"calls,omitempty"`
PatternSelectors []Match `xml:"match,omitempty" json:"patternSelectors,omitempty"`
PatternSelectors []Match `xml:"match,omitempty" json:"matches,omitempty"`
}

// Which controls and subcontrols to exclude from the resource (source catalog)
// being imported
type Exclude struct {
IdSelectors []Call `xml:"call,omitempty" json:"calls,omitempty"`
PatternSelectors []Match `xml:"match,omitempty" json:"patternSelectors,omitempty"`
PatternSelectors []Match `xml:"match,omitempty" json:"matches,omitempty"`
}

// A parameter setting, to be propagated to points of insertion
type SetParam struct {
Id string `xml:"param-id,attr,omitempty" json:"id,omitempty"`
Id string `xml:"id,attr,omitempty" json:"id,omitempty"`
Class string `xml:"class,attr,omitempty" json:"class,omitempty"`
DependsOn string `xml:"depends-on,attr,omitempty" json:"dependsOn,omitempty"`
Label catalog.Label `xml:"label,omitempty" json:"label,omitempty"`
Descriptions []catalog.Desc `xml:"desc,omitempty" json:"descriptions,omitempty"`
Descriptions []catalog.Desc `xml:"desc,omitempty" json:"descs,omitempty"`
Constraints []catalog.Constraint `xml:"constraint,omitempty" json:"constraints,omitempty"`
Links []catalog.Link `xml:"link,omitempty" json:"links,omitempty"`
Parts []catalog.Part `xml:"part,omitempty" json:"parts,omitempty"`
Expand All @@ -88,8 +88,8 @@ type Alter struct {
ControlId string `xml:"control-id,attr,omitempty" json:"controlId,omitempty"`
// Value of the 'id' flag on a target subcontrol
SubcontrolId string `xml:"subcontrol-id,attr,omitempty" json:"subcontrolId,omitempty"`
Removals []Remove `xml:"remove,omitempty" json:"removals,omitempty"`
Additions []Add `xml:"add,omitempty" json:"additions,omitempty"`
Removals []Remove `xml:"remove,omitempty" json:"removes,omitempty"`
Additions []Add `xml:"add,omitempty" json:"adds,omitempty"`
}

// Specifies contents to be added into controls or subcontrols, in resolution
Expand Down Expand Up @@ -118,11 +118,6 @@ type Combine struct {
// elements or attributes.
type AsIs string

func (a *AsIs) UnmarshalJSON(b []byte) error {
*a = AsIs(string(b))
return nil
}

// Include all controls from the imported resource (catalog)
type All struct {
// Whether subcontrols should be implicitly included, if not called.
Expand Down
6 changes: 6 additions & 0 deletions types/oscal/profile/unmarshalers.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package profile

func (a *AsIs) UnmarshalJSON(b []byte) error {
*a = AsIs(string(b))
return nil
}
21 changes: 21 additions & 0 deletions vendor/github.com/jinzhu/inflection/LICENSE

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

55 changes: 55 additions & 0 deletions vendor/github.com/jinzhu/inflection/README.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading