//
//  CommonMacros.h
//  ConnectSDK
//
//  Created by Eugene Nikolskyi on 3/25/15.
//  Copyright (c) 2015 LG Electronics. All rights reserved.
//
//  Licensed under the Apache License, Version 2.0 (the "License");
//  you may not use this file except in compliance with the License.
//  You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS,
//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//  See the License for the specific language governing permissions and
//  limitations under the License.
//

/// Asserts a condition about a state, and throws an
/// @c NSInternalInconsistencyException and given message as the reason if it
/// evaluates to @c NO. Similar to @c NSAssert().
static inline void _assert_state(const BOOL condition, NSString *msg) {
    if (!condition) {
        @throw [NSException exceptionWithName:NSInternalInconsistencyException
                                       reason:msg
                                     userInfo:nil];
    }
};

/// Get a property's name as a string. Prevents mistypings when using methods
/// like `valueForKey:`.
/// http://stackoverflow.com/questions/6615826/get-property-name-as-a-string/12623102#12623102
#define STRING_PROPERTY(prop) NSStringFromSelector(@selector(prop))
