yourkarma/JWT

View on GitHub
Sources/JWT/include/JWTCoding+ResultTypes.h

Summary

Maintainability
Test Coverage
//
//  JWTCoding+ResultTypes.h
//  JWT
//
//  Created by Lobanov Dmitry on 30.11.16.
//  Copyright © 2016 JWTIO. All rights reserved.
//

#import "JWTCoding.h"
#import "JWTDeprecations.h"
@protocol JWTClaimsSetProtocol;

@interface JWTCodingResultComponents : NSObject
@property (copy, nonatomic, readonly, class) NSString *headers;
@property (copy, nonatomic, readonly, class) NSString *payload;
@end

@interface JWT (ResultTypes) @end

/*
            ResultType
                /\
               /  \
              /    \
          Success  Error
 
    Protocols: Mutable and Immutable (?!?)
 */

// Public
@protocol JWTCodingResultTypeSuccessEncodedProtocol <NSObject>
@property (copy, nonatomic, readonly) NSString *encoded;
- (instancetype)initWithEncoded:(NSString *)encoded;
@property (copy, nonatomic, readonly) NSString *token;
- (instancetype)initWithToken:(NSString *)token;
@end

// Public
@protocol JWTCodingResultTypeSuccessDecodedProtocol <NSObject>
@property (copy, nonatomic, readonly) NSDictionary *headers;
@property (copy, nonatomic, readonly) NSDictionary *payload;

/// This is a dictionary that contains header and payload.
///
/// @discussion
/// You may access to its guts via `JWTCodingResultComponents`.
///
/// dictionary = {
///   JWTCodingResultComponents.headers : headers,
///   JWTCodingResultComponents.payload : payload
/// }
///
@property (copy, nonatomic, readonly) NSDictionary *headerAndPayloadDictionary;
@property (copy, nonatomic, readonly) id<JWTClaimsSetProtocol> claimsSetStorage;

- (instancetype)initWithHeadersAndPayload:(NSDictionary *)headersAndPayloadDictionary;
- (instancetype)initWithHeaders:(NSDictionary *)headers withPayload:(NSDictionary *)payload;
- (instancetype)initWithClaimsSetStorage:(id<JWTClaimsSetProtocol>)claimsSetStorage;
@end

// Public
@interface JWTCodingResultTypeSuccess : NSObject <JWTCodingResultTypeSuccessEncodedProtocol,JWTCodingResultTypeSuccessDecodedProtocol> @end

// Public
@protocol JWTCodingResultTypeErrorProtocol <NSObject>
@property (copy, nonatomic, readonly) NSError *error;
- (instancetype)initWithError:(NSError *)error;
@end

@interface JWTCodingResultTypeError : NSObject <JWTCodingResultTypeErrorProtocol> @end

@interface JWTCodingResultType : NSObject
- (instancetype)initWithSuccessResult:(JWTCodingResultTypeSuccess *)success;
- (instancetype)initWithErrorResult:(JWTCodingResultTypeError *)error;
@property (strong, nonatomic, readonly) JWTCodingResultTypeSuccess *successResult;
@property (strong, nonatomic, readonly) JWTCodingResultTypeError *errorResult;
@end