Skip to content

Instantly share code, notes, and snippets.

@isaac-weisberg
Created April 15, 2019 09:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save isaac-weisberg/e285b0462fc8fc089f65b0a4a817d1be to your computer and use it in GitHub Desktop.
Save isaac-weisberg/e285b0462fc8fc089f65b0a4a817d1be to your computer and use it in GitHub Desktop.
Can't wait for Swift.Result
enum ResultTing<Value, Error> {
case success(Value)
case failure(Error)
}
extension ResultTing {
func then<NewValue>(_ predicate: (Value) -> NewValue) -> ResultTing<NewValue, Error> {
switch self {
case .success(let value):
return .success(predicate(value))
case .failure(let error):
return .failure(error)
}
}
func then<NewValue>(_ predicate: (Value) -> ResultTing<NewValue, Error>) -> ResultTing<NewValue, Error> {
switch self {
case .success(let value):
return predicate(value)
case .failure(let error):
return .failure(error)
}
}
func `catch`<NewError>(_ predicate: (Error) -> ResultTing<Value, NewError>) -> ResultTing<Value, NewError> {
switch self {
case .success(let value):
return .success(value)
case .failure(let error):
return predicate(error)
}
}
func `catch`<NewError>(_ predicate: (Error) -> NewError) -> ResultTing<Value, NewError> {
switch self {
case .success(let value):
return .success(value)
case .failure(let error):
return .failure(predicate(error))
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment