aboutsummaryrefslogtreecommitdiff
path: root/gtad/gtad.yaml
diff options
context:
space:
mode:
authorKitsune Ral <Kitsune-Ral@users.sf.net>2020-06-01 14:53:59 +0200
committerKitsune Ral <Kitsune-Ral@users.sf.net>2020-06-01 14:54:32 +0200
commit51d27f3bcaacefda78dc033021b6a85152ab972e (patch)
tree5e461c9c30bc1e6ee6394e57b325f579336e3eab /gtad/gtad.yaml
parent7ac93db4553aa624326a8e28b74151c784b937a7 (diff)
downloadlibquotient-51d27f3bcaacefda78dc033021b6a85152ab972e.tar.gz
libquotient-51d27f3bcaacefda78dc033021b6a85152ab972e.zip
GTAD parts: new home and format updates for GTAD 0.7
All GTAD-related files (gtad.yaml and templates) from now live in their dedicated gtad/ directory - this helps against removing them accidentally along with the rest of the generated files. The format to list generated files in gtad.yaml has changed a bit before GTAD 0.7 beta2; gtad.yaml in this commit conforms to the new structure.
Diffstat (limited to 'gtad/gtad.yaml')
-rw-r--r--gtad/gtad.yaml169
1 files changed, 169 insertions, 0 deletions
diff --git a/gtad/gtad.yaml b/gtad/gtad.yaml
new file mode 100644
index 00000000..51f9e26b
--- /dev/null
+++ b/gtad/gtad.yaml
@@ -0,0 +1,169 @@
+analyzer:
+ subst:
+ "%CLIENT_RELEASE_LABEL%": r0
+ "%CLIENT_MAJOR_VERSION%": r0
+ identifiers:
+ signed: signedData
+ unsigned: unsignedData
+ PushRule/default: isDefault
+ default: defaultVersion # getCapabilities/RoomVersionsCapability
+ origin_server_ts: originServerTimestamp # Instead of originServerTs
+ start: begin # Because start() is a method in BaseJob
+ m.upload.size: uploadSize
+ m.homeserver: homeserver
+ m.identity_server: identityServer
+ m.change_password: changePassword
+ m.room_versions: roomVersions
+ AuthenticationData/additionalProperties: authInfo
+
+ # Structure inside `types`:
+ # - swaggerType: <targetTypeSpec>
+ # OR
+ # - swaggerType:
+ # - swaggerFormat: <targetTypeSpec>
+ # - /swaggerFormatRegEx/: <targetTypeSpec>
+ # - //: <targetTypeSpec> # default, if the format doesn't mach anything above
+ # WHERE
+ # targetTypeSpec = targetType OR
+ # { type: targetType, imports: <filename OR [ filenames... ]>, <other attributes...> }
+ # swaggerType can be +set/+on pair; attributes from the map under +set
+ # are added to each type from the sequence under +on.
+ types:
+ - +set: &UseOmittable
+ useOmittable:
+ imports: [ '"converters.h"' ]
+ omittedValue: 'none' # See `none` in converters.h
+ +on:
+ - integer:
+ - int64: qint64
+ - int32: qint32
+ - //: int
+ - number:
+ - float: float
+ - //: double
+ - boolean: bool
+ - string:
+ - byte: &ByteStream
+ type: QIODevice*
+ imports: <QtCore/QIODevice>
+ - binary: *ByteStream
+ - +set: { avoidCopy: }
+ +on:
+ - date:
+ type: QDate
+ initializer: QDate::fromString("{{defaultValue}}")
+ imports: <QtCore/QDate>
+ - dateTime:
+ type: QDateTime
+ initializer: QDateTime::fromString("{{defaultValue}}")
+ imports: <QtCore/QDateTime>
+ - //: &QString
+ type: QString
+ initializer: QStringLiteral("{{defaultValue}}")
+ isString:
+ - file: *ByteStream
+ - +set: { avoidCopy: }
+ +on:
+ - object: &QJsonObject { type: QJsonObject, imports: <QtCore/QJsonObject> }
+ - $ref:
+ - +set: { moveOnly: }
+ +on:
+ - /state_event.yaml$/:
+ { type: StateEventPtr, imports: '"events/eventloader.h"' }
+ - /room_event.yaml$/:
+ { type: RoomEventPtr, imports: '"events/eventloader.h"' }
+ - /event.yaml$/:
+ { type: EventPtr, imports: '"events/eventloader.h"' }
+ - /m\.room\.member$/: pass # This $ref is only used in an array, see below
+ - //: *UseOmittable # Also apply "avoidCopy" to all other ref'ed types
+ - schema: # Properties of inline structure definitions
+ - TurnServerCredentials: *QJsonObject # Because it's used as is
+ - //: *UseOmittable
+ - array:
+ - string: QStringList
+ - +set: { moveOnly: }
+ +on:
+ - /^Notification|Result$/:
+ type: "std::vector<{{1}}>"
+ imports: '"events/eventloader.h"'
+ - /m\.room\.member$/:
+ type: "EventsArray<RoomMemberEvent>"
+ imports: '"events/roommemberevent.h"'
+ - /state_event.yaml$/: StateEvents
+ - /room_event.yaml$/: RoomEvents
+ - /event.yaml$/: Events
+ - //: { type: "QVector<{{1}}>", imports: <QtCore/QVector> }
+ - map: # `additionalProperties` in OpenAPI
+ - RoomState:
+ type: "UnorderedMap<QString, {{1}}>"
+ moveOnly:
+ imports: '"util.h"'
+ - /.+/:
+ type: "QHash<QString, {{1}}>"
+ imports: <QtCore/QHash>
+ - //:
+ type: QVariantHash
+ imports: <QtCore/QVariant>
+ - variant: # A sequence `type` (multitype) in OpenAPI
+ - /^string,null|null,string$/: *QString
+ - //: { type: QVariant, imports: <QtCore/QVariant> }
+
+ #operations:
+
+mustache:
+ constants:
+ # Syntax elements used by GTAD
+# _quote: '"' # Common quote for left and right
+# _leftQuote: '"'
+# _rightQuote: '"'
+# _joinChar: ',' # The character used by {{_join}} - not working yet
+ _comment: '//'
+ copyrightName: Kitsune Ral
+ copyrightEmail: <kitsune-ral@users.sf.net>
+
+ partials:
+ _typeRenderer: "{{#scope}}{{scopeCamelCase}}Job::{{/scope}}{{>name}}"
+ omittedValue: '{}' # default value to initialize omitted parameters with
+ initializer: '{{defaultValue}}'
+ cjoin: '{{#hasMore}}, {{/hasMore}}'
+
+ openOmittable: "{{^required?}}{{#useOmittable}}{{^defaultValue}}Omittable<{{/defaultValue}}{{/useOmittable}}{{/required?}}"
+ closeOmittable: "{{^required?}}{{#useOmittable}}{{^defaultValue}}>{{/defaultValue}}{{/useOmittable}}{{/required?}}"
+
+ maybeOmittableType: "{{>openOmittable}}{{dataType.name}}{{>closeOmittable}}"
+ qualifiedMaybeOmittableType: "{{>openOmittable}}{{dataType.qualifiedName}}{{>closeOmittable}}"
+
+ maybeCrefType: "{{#avoidCopy}}const {{/avoidCopy}}{{>maybeOmittableType}}{{#avoidCopy}}&{{/avoidCopy}}{{#moveOnly}}&&{{/moveOnly}}"
+ qualifiedMaybeCrefType:
+ "{{#avoidCopy}}const {{/avoidCopy}}{{>qualifiedMaybeOmittableType}}{{#avoidCopy}}&{{/avoidCopy}}{{#moveOnly}}&&{{/moveOnly}}"
+
+ maybeCrefJsonObject: "{{^propertyMap}}const QJsonObject&{{/propertyMap}}{{#propertyMap}}QJsonObject{{/propertyMap}}"
+ takeOrValue: "{{#propertyMap}}take{{/propertyMap}}{{^propertyMap}}value{{/propertyMap}}"
+
+ initializeDefaultValue: "{{#defaultValue}}{{>initializer}}{{/defaultValue}}{{^defaultValue}}{{>omittedValue}}{{/defaultValue}}"
+ joinedParamDecl: '{{>maybeCrefType}} {{paramName}}{{^required?}} = {{>initializeDefaultValue}}{{/required?}}{{>cjoin}}'
+ joinedParamDef: '{{>maybeCrefType}} {{paramName}}{{>cjoin}}'
+ passQueryParams: '{{#queryParams}}{{paramName}}{{>cjoin}}{{/queryParams}}'
+
+ # Doc-comment blocks. Comment indent is managed by clang-format
+ # (without clang-format there'd have to be a separate partial definition
+ # for each indent...)
+
+ # For structures that are not supposed to have a summary (e.g., JSON schema)
+ docCommentShort: |-
+ {{#description}}
+ /// {{_}}{{/description}}
+ docCommentSummary: |-
+ {{#summary}} \brief {{summary}}
+ *{{/summary}}
+
+ templates:
+ data:
+ .h: "{{>template.h.mustache}}"
+ .cpp: "{{>template.cpp.mustache}}"
+ api:
+ .h: "{{>template.h.mustache}}"
+ .cpp: "{{>template.cpp.mustache}}"
+
+ #outFilesList: apifiles.txt
+