public static JToken ToJson(GetVariant var) { return(new JObject { { "type", "getvar" }, { "id", ToJson(var.Id) }, { "key", ToJson(var.Key) } }); }
/** * Resolve a variant expression to the variant object. * * @param {Object} env * Resolver environment object. * @param {Object} expr * An expression to be resolved. * @param {Object} expr.id * An Identifier of a message for which the variant is resolved. * @param {Object} expr.id.name * Name a message for which the variant is resolved. * @param {Object} expr.key * Variant key to be resolved. * @returns {FluentType} * @private */ static Node VariantExpression(ResolverEnvironment env, GetVariant expr) { var message = MessageReference(env, expr.Id); if (message is FluentNone) { return(message); } if (message is Message actualMessage) { message = actualMessage.Value; if (message is Pattern pattern) { if (pattern.Elements.Any()) { message = pattern.Elements.First(); } } } var keyword = (IFluentType)ResolveNode(env, expr.Key); if (message is SelectExpression sexp) { // Match the specified key against keys of each variant, in order. foreach (var variant in sexp.Variants) { var key = ResolveNode(env, variant.Key); if (keyword.Match(env.Context, key)) { return(variant.Value); } } } env.Errors?.Add(new ReferenceError( $"Unknown variant: {keyword.Format(env.Context)}")); return(message); }