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 /^/(Location|Protocol|User)$/: 'ThirdParty$1' # Change some response names /requestTokenTo.*/user: "" login>/medium: "" login>/address: "" login # OR # - swaggerType: # - swaggerFormat: # - /swaggerFormatRegEx/: # - //: # default, if the format doesn't mach anything above # WHERE # targetTypeSpec = targetType OR # { type: targetType, imports: , } # 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: omittedValue: 'none' # Quotient::none in lib/omittable.h +on: - integer: - int64: qint64 - int32: qint32 - //: int - number: - float: float - //: double - boolean: bool - string: - byte: &ByteStream type: QIODevice* imports: - binary: *ByteStream - +set: { avoidCopy: } +on: - date: type: QDate initializer: QDate::fromString("{{defaultValue}}") - dateTime: type: QDateTime initializer: QDateTime::fromString("{{defaultValue}}") - uri: type: QUrl initializer: QUrl::fromEncoded("{{defaultValue}}") - //: &QString type: QString initializer: QStringLiteral("{{defaultValue}}") isString: - file: *ByteStream - +set: { avoidCopy: } +on: - object: &QJsonObject { type: QJsonObject } - $ref: - +set: moveOnly: +on: - /state_event.yaml$/: type: StateEventPtr imports: '"events/stateevent.h"' - /(room|client)_event.yaml$/: type: RoomEventPtr imports: '"events/roomevent.h"' - /event(_without_room_id)?.yaml$/: type: EventPtr imports: '"events/event.h"' - +set: # This renderer applies to everything actually $ref'ed # (not substituted) _importRenderer: '"{{#segments}}{{_}}{{#_join}}/{{/_join}}{{/segments}}.h"' +on: - '/^(\./)?definitions/request_email_validation.yaml$/': title: EmailValidationData - '/^(\./)?definitions/request_msisdn_validation.yaml$/': title: MsisdnValidationData - /_filter.yaml$/: # Event/RoomEventFilters do NOT need Omittable<> # Despite being used in two calls, it's more practical to have those # fields available as getters right from the respective job classes - /public_rooms_response.yaml$/: { _inline: true } # list_public_rooms.yaml (via public_rooms_response.yaml) and # space_hierarchy.yaml use public_rooms_chunk.yaml as a common base # structure, adding (space_hiearchy) or overriding # (public_rooms_response) fields for their purposes. The spec text # confusingly ends up with having two different structures named # "PublicRoomsChunk". To make sure the types are distinct in # libQuotient, this common base is inlined into the actually used # data structures (that have distinct names) defined # in space_hierarchy.h and public_rooms_response.h, respectively - /public_rooms_chunk.yaml$/: { _inline: true } - //: *UseOmittable # Also apply "avoidCopy" to all other ref'ed types - schema: - getTurnServer<: *QJsonObject # It's used as an opaque JSON object # - defineFilter>: &Filter # Force folding into a structure # type: Filter # imports: '"csapi/definitions/sync_filter.h"' # - getFilter<: *Filter - StrippedChildStateEvent: void # only used in an array, see below - RoomFilter: # A structure inside Filter, same story as with *_filter.yaml - OneTimeKeys: type: OneTimeKeys imports: '"e2ee/e2ee.h"' - //: *UseOmittable - array: - string: QStringList - +set: { moveOnly: } +on: - /^Notification|Result|ChildRoomsChunk$/: "std::vector<{{1}}>" - /^StrippedChildStateEvent$|state_event.yaml$/: type: StateEvents imports: '"events/stateevent.h"' # For StrippedChildStateEvent - /(room|client)_event.yaml$/: RoomEvents - /event(_without_room_id)?.yaml$/: Events - //: "QVector<{{1}}>" - map: # `additionalProperties` in OpenAPI - RoomState: type: "UnorderedMap" moveOnly: - /.+/: "QHash" - //: QVariantHash # QJsonObject?.. - variant: # A sequence `type` or a 'oneOf' group in OpenAPI - /^string,null|null,string$/: *QString - //: QVariant #operations: mustache: # delimiter: '%| |%' # or something else instead of '{{ }}' constants: # Syntax elements used by GTAD # _quote: '"' # Common quote for left and right # _leftQuote: '"' # _rightQuote: '"_ls' _comment: '//' copyrightName: Kitsune Ral copyrightEmail: 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}}" maybeCrefJsonObject: "{{^propertyMap}}const QJsonObject&{{/propertyMap}}\ {{#propertyMap}}QJsonObject{{/propertyMap}}" takeOrValue: "{{#propertyMap}}take{{/propertyMap}}{{^propertyMap}}value{{/propertyMap}}" takeOrLoad: "{{#moveOnly}}take{{/moveOnly}}{{^moveOnly}}load{{/moveOnly}}" initializeDefaultValue: "{{#defaultValue}}{{>initializer}}{{/defaultValue}}\ {{^defaultValue}}{{>omittedValue}}{{/defaultValue}}" # No inner indents in folded values! joinedParamDecl: >- {{>maybeCrefType}} {{paramName}} {{^required?}} = {{>initializeDefaultValue}}{{/required?}}{{>cjoin}} joinedParamDef: "{{>maybeCrefType}} {{paramName}}{{>cjoin}}" passPathAndMaybeQuery: >- makePath("{{basePathWithoutHost}}"{{#pathParts}}, {{_}}{{/pathParts}}){{#queryParams?}}, queryTo{{camelCaseOperationId}}( {{#queryParams}}{{paramName}}{{>cjoin}}{{/queryParams}}){{/queryParams?}} nonInlineResponseSignature: |- {{>docCommentShort}} {{>maybeOmittableType}} {{paramName}}(){{^moveOnly}} const{{/moveOnly}} # 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...) but we take care of line breaks to maintain # some sanity even before clang-format # This is for structures that don't expect a summary (e.g., JSON schema) docCommentShort: |- {{#description}} /// {{_}}{{/description}} # For structures with the summary, a common partial for summary is here; # the main part is different in different places docCommentSummary: |- {{#summary}} \brief {{summary}} *{{/summary}} templates: data: .h: "{{>data.h.mustache}}" api: .h: "{{>operation.h.mustache}}" .cpp: "{{>operation.cpp.mustache}}" #outFilesList: apifiles.txt