-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathobjectclass.go
More file actions
70 lines (65 loc) · 2.24 KB
/
Copy pathobjectclass.go
File metadata and controls
70 lines (65 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package ldapschemaparser
// ClassKindAbstract, ClassKindStructural and ClassKindAuxiliary indicates
// the kind of object class. (RFC-4512 4.1.1)
const (
ClassKindAbstract string = "ABSTRACT"
ClassKindStructural string = "STRUCTURAL"
ClassKindAuxiliary string = "AUXILIARY"
)
// ObjectClassSchema represent schema of object class
type ObjectClassSchema struct {
NumericOID string
Name []string
Description string
Obsolete bool
SuperClasses []string
ClassKind string
Must []string
May []string
Extensions map[string][]string
}
// NewObjectClassSchemaViaGenericSchema creates object class schema instance from GenericSchema
func NewObjectClassSchemaViaGenericSchema(generic *GenericSchema) (result *ObjectClassSchema, err error) {
if "" == generic.NumericOID {
err = ErrMissingNumericOID
return
}
classKind := ClassKindStructural
if generic.HasFlagKeyword(ClassKindAbstract) {
classKind = ClassKindAbstract
} else if generic.HasFlagKeyword(ClassKindAuxiliary) {
classKind = ClassKindAuxiliary
}
return &ObjectClassSchema{
NumericOID: generic.NumericOID,
Name: generic.getValuesOfParameterizedKeyword("NAME"),
Description: generic.getValueOfParameterizedKeyword("DESC"),
Obsolete: generic.HasFlagKeyword("OBSOLETE"),
SuperClasses: generic.getValuesOfParameterizedKeyword("SUP"),
ClassKind: classKind,
Must: generic.getValuesOfParameterizedKeyword("MUST"),
May: generic.getValuesOfParameterizedKeyword("MAY"),
Extensions: generic.fetchExtensionProperties(),
}, nil
}
func (s *ObjectClassSchema) String() string {
b := SchemaTextBuilder{}
b.AppendFragment(s.NumericOID)
b.AppendQStringSlice("NAME", s.Name)
b.AppendQString("DESC", s.Description)
b.AppendFlag("OBSOLETE", s.Obsolete)
b.AppendOIDSlice("SUP", s.SuperClasses)
b.AppendFragment(s.ClassKind)
b.AppendOIDSlice("MUST", s.Must)
b.AppendOIDSlice("MAY", s.May)
b.AppendExtensions(s.Extensions)
return b.String()
}
// ParseObjectClassSchema parses object class schema text
func ParseObjectClassSchema(schemaText string) (objectClassSchema *ObjectClassSchema, err error) {
genericSchema, err := Parse(schemaText)
if nil != err {
return
}
return NewObjectClassSchemaViaGenericSchema(genericSchema)
}