platform/angel_serialize/lib/angel_serialize.dart

140 lines
3.8 KiB
Dart
Raw Normal View History

2019-01-25 14:48:23 +00:00
export 'package:angel_model/angel_model.dart';
export 'package:collection/collection.dart';
export 'package:meta/meta.dart' show required, Required;
2018-11-03 07:13:19 +00:00
export 'package:quiver_hashcode/hashcode.dart' show hashObjects;
2017-06-17 01:26:19 +00:00
/// Excludes a field from being excluded.
2019-01-25 14:44:58 +00:00
class Exclude extends SerializableField {
const Exclude({bool canDeserialize: false, bool canSerialize: false})
: super(canDeserialize: canDeserialize, canSerialize: canSerialize);
2017-06-17 01:26:19 +00:00
}
2019-01-25 14:44:58 +00:00
const SerializableField nullable = const SerializableField(isNullable: true);
2017-06-17 01:26:19 +00:00
2019-01-25 14:44:58 +00:00
const Exclude exclude = const Exclude();
2019-01-06 23:50:33 +00:00
2019-01-25 14:44:58 +00:00
/// Shorthand for [SerializableField].
class DefaultsTo extends SerializableField {
const DefaultsTo(value) : super(defaultValue: value);
}
2018-05-15 19:54:32 +00:00
2019-01-25 14:44:58 +00:00
/// Shorthand for [SerializableField].
class HasAlias extends SerializableField {
const HasAlias(String name) : super(alias: name);
2018-05-15 19:54:32 +00:00
}
2019-01-06 23:50:33 +00:00
/// Attaches options to a field.
class SerializableField {
/// An alternative name for this field.
final String alias;
/// A default for this field.
final defaultValue;
/// A custom serializer for this field.
final Symbol serializer;
/// A custom serializer for this field.
final Symbol deserializer;
2019-01-07 00:56:05 +00:00
/// An error message to be printed when the provided value is invalid.
final String errorMessage;
/// Whether this field can be set to `null`.
final bool isNullable;
/// Whether to exclude this field from serialization. Defaults to `false`.
final bool exclude;
/// Whether this field can be serialized, if [exclude] is `true`. Defaults to `false`.
final bool canDeserialize;
2019-01-06 23:50:33 +00:00
2019-01-07 00:56:05 +00:00
/// Whether this field can be serialized, if [exclude] is `true`. Defaults to `false`.
final bool canSerialize;
2019-01-09 19:25:05 +00:00
/// May be used with [serializer] and [deserializer].
///
/// Specifies the [Type] that this field serializes to.
///
/// Ex. If you have a field that serializes to a JSON string,
/// specify `serializesTo: String`.
final Type serializesTo;
2019-01-07 00:56:05 +00:00
const SerializableField(
2019-01-06 23:50:33 +00:00
{this.alias,
this.defaultValue,
this.serializer,
this.deserializer,
2019-01-07 00:56:05 +00:00
this.errorMessage,
2019-01-25 14:44:58 +00:00
this.isNullable: false,
2019-01-07 00:56:05 +00:00
this.exclude: false,
this.canDeserialize: false,
2019-01-09 19:25:05 +00:00
this.canSerialize: false,
this.serializesTo});
2019-01-06 23:50:33 +00:00
}
2017-06-17 01:26:19 +00:00
/// Marks a class as eligible for serialization.
class Serializable {
const Serializable(
2018-02-28 00:47:42 +00:00
{this.serializers: const [Serializers.map, Serializers.json],
this.autoSnakeCaseNames: true,
2019-01-09 19:25:05 +00:00
@deprecated this.autoIdAndDateFields: true,
2019-01-07 00:56:05 +00:00
this.includeAnnotations: const []});
/// A list of enabled serialization modes.
///
/// See [Serializers].
final List<int> serializers;
/// Overrides the setting in `SerializerGenerator`.
final bool autoSnakeCaseNames;
/// Overrides the setting in `JsonModelGenerator`.
2019-01-09 19:25:05 +00:00
@deprecated
final bool autoIdAndDateFields;
2019-01-07 00:56:05 +00:00
/// A list of constant members to affix to the generated class.
final List includeAnnotations;
2017-06-17 01:26:19 +00:00
}
const Serializable serializable = const Serializable();
/// Used by `package:angel_serialize_generator` to reliably identify generated models.
class GeneratedSerializable {
const GeneratedSerializable();
}
2018-07-11 15:49:46 +00:00
const GeneratedSerializable generatedSerializable =
const GeneratedSerializable();
/// The supported serialization types.
abstract class Serializers {
/// All supported serialization types.
2018-03-29 19:58:36 +00:00
static const List<int> all = const [map, json, typescript];
/// Enable `fromMap` and `toMap` methods on the model class.
2018-02-28 00:47:42 +00:00
static const int map = 0;
/// Enable a `toJson` method on the model class.
2018-02-28 00:47:42 +00:00
static const int json = 1;
2018-03-29 19:58:36 +00:00
/// Generate a TypeScript definition file (`.d.ts`) for use on the client-side.
static const int typescript = 2;
}
2019-01-25 14:44:58 +00:00
@deprecated
class DefaultValue {
final value;
const DefaultValue(this.value);
}
2019-01-06 23:50:33 +00:00
@deprecated
/// Prefer [SerializableField] instead.
2017-06-17 01:26:19 +00:00
class Alias {
final String name;
2017-06-17 01:26:19 +00:00
const Alias(this.name);
}