"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.serde = serde; const option_1 = require("./option"); const ContextKind = Object.freeze({ Class: 'class', Method: 'method', Getter: 'getter', Setter: 'setter', Field: 'field', Accessor: 'accessor' }); function decorateClass(target, context, options) { const serde = context.metadata.serde; context.metadata.serde = new option_1.SerdeOptions(target, options, serde === null || serde === void 0 ? void 0 : serde.properties); } function decorateField(context, options) { const serde = context.metadata.serde || new option_1.SerdeOptions(undefined); serde.properties.set(context.name, options); context.metadata.serde = serde; } function serde(options) { return function (target, context) { switch (context.kind) { case ContextKind.Class: decorateClass(target, context, options); break; case ContextKind.Field: decorateField(context, options); default: break; } }; }