blob: 9795ed69edc321d582ddbd2d4b3090089f68f70a [file] [log] [blame]
// Copyright 2017, the Chromium 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.
part of cloud_firestore;
enum FieldValueType { arrayUnion, arrayRemove, delete, serverTimestamp }
/// Sentinel values that can be used when writing document fields with set() or
/// update().
class FieldValue {
FieldValue._(this.type, this.value);
final FieldValueType type;
final dynamic value;
/// Returns a special value that tells the server to union the given elements
/// with any array value that already exists on the server.
///
/// Each specified element that doesn't already exist in the array will be
/// added to the end. If the field being modified is not already an array it
/// will be overwritten with an array containing exactly the specified
/// elements.
static FieldValue arrayUnion(List<dynamic> elements) =>
FieldValue._(FieldValueType.arrayUnion, elements);
/// Returns a special value that tells the server to remove the given
/// elements from any array value that already exists on the server.
///
/// All instances of each element specified will be removed from the array.
/// If the field being modified is not already an array it will be overwritten
/// with an empty array.
static FieldValue arrayRemove(List<dynamic> elements) =>
FieldValue._(FieldValueType.arrayRemove, elements);
/// Returns a sentinel for use with update() to mark a field for deletion.
static FieldValue delete() => FieldValue._(FieldValueType.delete, null);
/// Returns a sentinel for use with set() or update() to include a
/// server-generated timestamp in the written data.
static FieldValue serverTimestamp() =>
FieldValue._(FieldValueType.serverTimestamp, null);
}