// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'message.dart';

/// A Flutter Driver command that enables or disables the FrameSync mechanism.
class SetFrameSync extends Command {
  /// Creates a command to toggle the FrameSync mechanism.
  const SetFrameSync(this.enabled, { Duration timeout }) : super(timeout: timeout);

  /// Deserializes this command from the value generated by [serialize].
  SetFrameSync.deserialize(Map<String, String> params)
    : enabled = params['enabled'].toLowerCase() == 'true',
      super.deserialize(params);

  /// Whether frameSync should be enabled or disabled.
  final bool enabled;

  @override
  String get kind => 'set_frame_sync';

  @override
  Map<String, String> serialize() => super.serialize()..addAll(<String, String>{
    'enabled': '$enabled',
  });
}

/// The result of a [SetFrameSync] command.
class SetFrameSyncResult extends Result {
  /// Creates a [SetFrameSyncResult].
  const SetFrameSyncResult();

  /// Deserializes this result from JSON.
  static SetFrameSyncResult fromJson(Map<String, dynamic> json) {
    return const SetFrameSyncResult();
  }

  @override
  Map<String, dynamic> toJson() => <String, dynamic>{};
}
