/*
 *  Copyright 2014 The WebRTC Project Authors. All rights reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#import "RTCMediaConstraints+JSON.h"

static NSString const *kRTCMediaConstraintsMandatoryKey = @"mandatory";

@implementation RTCMediaConstraints (JSON)

+ (RTCMediaConstraints *)constraintsFromJSONDictionary:
    (NSDictionary *)dictionary {
  NSDictionary *mandatory = dictionary[kRTCMediaConstraintsMandatoryKey];
  NSMutableDictionary *mandatoryContraints =
      [NSMutableDictionary dictionaryWithCapacity:[mandatory count]];
  [mandatory enumerateKeysAndObjectsUsingBlock:^(
      id key, id obj, BOOL *stop) {
    mandatoryContraints[key] = obj;
  }];
  // TODO(tkchin): figure out json formats for optional constraints.
  RTCMediaConstraints *constraints =
      [[RTCMediaConstraints alloc]
          initWithMandatoryConstraints:mandatoryContraints
                   optionalConstraints:nil];
  return constraints;
}

@end
