| // | 
| //  VKApiObject.h | 
| // | 
| //  Copyright (c) 2014 VK.com | 
| // | 
| //  Permission is hereby granted, free of charge, to any person obtaining a copy of | 
| //  this software and associated documentation files (the "Software"), to deal in | 
| //  the Software without restriction, including without limitation the rights to | 
| //  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of | 
| //  the Software, and to permit persons to whom the Software is furnished to do so, | 
| //  subject to the following conditions: | 
| // | 
| //  The above copyright notice and this permission notice shall be included in all | 
| //  copies or substantial portions of the Software. | 
| // | 
| //  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
| //  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS | 
| //  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR | 
| //  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER | 
| //  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 
| //  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | 
|   | 
| #import <objc/runtime.h> | 
| #import "VKObject.h" | 
|   | 
| /** | 
| Helps in objects parsing | 
| */ | 
| @interface VKPropertyHelper : VKObject | 
| @property(nonatomic, readonly) NSString *propertyName; | 
| @property(nonatomic, readonly) NSString *propertyClassName; | 
| @property(nonatomic, readonly) Class propertyClass; | 
| @property(nonatomic, readonly) BOOL isPrimitive; | 
| @property(nonatomic, readonly) BOOL isModelsArray; | 
| @property(nonatomic, readonly) BOOL isModel; | 
|   | 
| - (instancetype)initWith:(objc_property_t)prop; | 
| @end | 
|   | 
| @protocol VKApiObject <NSObject> | 
| + (instancetype)createWithDictionary:(NSDictionary *)dict; | 
|   | 
| + (instancetype)createWithArray:(NSArray *)array; | 
| @end | 
|   | 
| /** | 
| Basic class for API objects | 
| */ | 
| @interface VKApiObject : VKObject <VKApiObject> | 
| /// If it possible, contains object fields from JSON as it is | 
| @property(nonatomic, strong) NSDictionary *fields; | 
|   | 
| /** | 
| Initialize object with API json dictionary. This method tries to set all known properties of current class from dictionare | 
| @param dict API json dictionary | 
| @return Initialized object | 
| */ | 
| - (instancetype)initWithDictionary:(NSDictionary *)dict; | 
|   | 
| /** | 
| Serialize current object into dictionary | 
| @return Key-value dictionary, contains current object | 
| */ | 
| - (NSDictionary *)serialize; | 
| @end |