OctagonStateMachineHelpers.h [plain text]
#if OCTAGON
#import <Foundation/Foundation.h>
#import "keychain/ckks/CKKSResultOperation.h"
#import "keychain/ckks/CKKSGroupOperation.h"
#import "keychain/ckks/CKKSAnalytics.h"
NS_ASSUME_NONNULL_BEGIN
@protocol OctagonStateString <NSObject>
@end
typedef NSString<OctagonStateString> OctagonState;
@protocol OctagonFlagString <NSObject>
@end
typedef NSString<OctagonFlagString> OctagonFlag;
extern OctagonState* const OctagonStateMachineNotStarted;
extern OctagonState* const OctagonStateMachineHalted;
@protocol OctagonStateTransitionOperationProtocol
@property OctagonState* nextState;
@property (readonly) OctagonState* intendedState;
@end
@interface OctagonStateTransitionOperation : CKKSResultOperation <OctagonStateTransitionOperationProtocol>
@property OctagonState* nextState;
@property (readonly) OctagonState* intendedState;
+ (instancetype)named:(NSString*)name
intending:(OctagonState*)intendedState
errorState:(OctagonState*)errorState
withBlockTakingSelf:(void(^)(OctagonStateTransitionOperation* op))block;
+ (instancetype)named:(NSString*)name
entering:(OctagonState*)intendedState NS_SWIFT_NAME(init(name:entering:));
@end
@interface OctagonStateTransitionGroupOperation : CKKSGroupOperation <OctagonStateTransitionOperationProtocol>
@property OctagonState* nextState;
@property (readonly) OctagonState* intendedState;
+ (instancetype)named:(NSString*)name
intending:(OctagonState*)intendedState
errorState:(OctagonState*)errorState
withBlockTakingSelf:(void(^)(OctagonStateTransitionGroupOperation* op))block;
@end
@interface OctagonStateTransitionRequest<__covariant OperationType : CKKSResultOperation<OctagonStateTransitionOperationProtocol>*> : NSObject
@property (readonly) NSString* name;
@property (readonly) NSSet<OctagonState*>* sourceStates;
@property (readonly) OperationType transitionOperation;
- (instancetype)timeout:(dispatch_time_t)timeout;
- (OperationType _Nullable)_onqueueStart;
- (instancetype)init:(NSString*)name
sourceStates:(NSSet<OctagonState*>*)sourceStates
serialQueue:(dispatch_queue_t)queue
timeout:(dispatch_time_t)timeout
transitionOp:(OperationType)transitionOp;
@end
NS_ASSUME_NONNULL_END
#endif // OCTAGON