blob: 27d1fb5bc18f05130e82bb1a3aeabccd1f992640 [file] [log] [blame]
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:meta/meta_meta.dart';
import 'json_serializable.dart';
import 'json_value.dart';
/// Allows configuration of how `enum` elements are treated as JSON.
@Target({TargetKind.enumType})
class JsonEnum {
const JsonEnum({
this.alwaysCreate = false,
this.fieldRename = FieldRename.none,
this.valueField,
});
/// If `true`, `_$[enum name]EnumMap` is generated for in library containing
/// the `enum`, even if the `enum` is not used as a field in a class annotated
/// with [JsonSerializable].
///
/// The default, `false`, means no extra helpers are generated for this `enum`
/// unless it is used by a class annotated with [JsonSerializable].
final bool alwaysCreate;
/// Defines the naming strategy when converting enum entry names to JSON
/// values.
///
/// With a value [FieldRename.none] (the default), the name of the enum entry
/// is used without modification.
///
/// See [FieldRename] for details on the other options.
///
/// Note: the value for [JsonValue.value] takes precedence over this option
/// for entries annotated with [JsonValue].
final FieldRename fieldRename;
/// Specifies the field within an "enhanced enum" to use as the value
/// to use for serialization.
///
/// If an individual `enum` element is annotated with `@JsonValue`
/// that value still takes precedence.
final String? valueField;
}