Skip to content

Commit

Permalink
Merge pull request #4 from OpenShelter/feature/swift3
Browse files Browse the repository at this point in the history
Release 0.1.0
  • Loading branch information
tmspzz authored Apr 27, 2017
2 parents 3b7b88e + 6dea737 commit 1ffb3cc
Show file tree
Hide file tree
Showing 34 changed files with 345 additions and 312 deletions.
17 changes: 8 additions & 9 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
language: objective-c
osx_image: xcode7.3
osx_image: xcode8.2
git:
submodules: false
before_install:
- git submodule update --init --recursive
install: true
script:
- pod lib lint
# TODO: reenable when https://github.com/OpenShelter/Tyro/issues/2 solved
# - pod lib lint
- set -o pipefail
- xcodebuild test -scheme Tyro -configuration Debug | xcpretty -c
- xcodebuild test -scheme Tyro-iOS -configuration Debug -sdk iphonesimulator -destination "platform=iOS Simulator,name=iPhone 6s" | xcpretty -c
- xcodebuild test -scheme Tyro-tvOS -destination 'platform=tvOS Simulator,name=Apple TV 1080p' | xcpretty -c
- xcodebuild build -scheme Tyro-watchOS -destination 'platform=watchOS Simulator,name=Apple Watch - 42mm' | xcpretty -c
notifications:
webhooks:
urls:
- https://webhooks.gitter.im/e/1d781e1bcbabade5de35
on_success: always
on_failure: always
on_start: always
# deploy:
# provider: script
# script: ./scripts/push.sh
# on:
# tags: true
2 changes: 1 addition & 1 deletion Cartfile
Original file line number Diff line number Diff line change
@@ -1 +1 @@
github "typelift/Swiftz" ~> 0.5.1
github "typelift/Swiftz" ~> 0.6.2
2 changes: 1 addition & 1 deletion Carthage/Checkouts/SwiftCheck
Submodule SwiftCheck updated 57 files
+3 −0 .gitignore
+0 −3 .gitmodules
+1 −0 .swift-version
+18 −12 .travis.yml
+0 −1 Cartfile.private
+0 −1 Cartfile.resolved
+0 −1 Carthage/Checkouts/Operadics
+0 −2 Package.swift
+26 −53 README.md
+79 −103 Sources/Arbitrary.swift
+896 −0 Sources/Cartesian.swift
+73 −72 Sources/Check.swift
+58 −55 Sources/CoArbitrary.swift
+89 −0 Sources/Compose.swift
+207 −333 Sources/Gen.swift
+16 −28 Sources/Lattice.swift
+118 −186 Sources/Modifiers.swift
+0 −246 Sources/Operators.swift
+382 −268 Sources/Property.swift
+81 −51 Sources/Random.swift
+55 −72 Sources/Rose.swift
+46 −45 Sources/State.swift
+0 −1 Sources/SwiftCheck.h
+600 −382 Sources/Test.swift
+15 −41 Sources/Testable.swift
+65 −25 Sources/Witness.swift
+61 −95 Sources/WitnessedArbitrary.swift
+2 −2 SwiftCheck.podspec
+208 −151 SwiftCheck.xcodeproj/project.pbxproj
+1 −1 SwiftCheck.xcodeproj/xcshareddata/xcschemes/SwiftCheck-iOS.xcscheme
+1 −1 SwiftCheck.xcodeproj/xcshareddata/xcschemes/SwiftCheck-tvOS.xcscheme
+1 −1 SwiftCheck.xcodeproj/xcshareddata/xcschemes/SwiftCheck.xcscheme
+62 −0 Templates/Cartesian.swift.gyb
+54 −0 Templates/CartesianSpec.swift.gyb
+0 −73 Tests/ComplexSpec.swift
+30 −0 Tests/LinuxMain.swift
+0 −42 Tests/RawRepresentableSpec.swift
+7 −1 Tests/SwiftCheckTests/BooleanIdentitySpec.swift
+264 −0 Tests/SwiftCheckTests/CartesianSpec.swift
+86 −0 Tests/SwiftCheckTests/ComplexSpec.swift
+13 −5 Tests/SwiftCheckTests/DiscardSpec.swift
+22 −9 Tests/SwiftCheckTests/FailureSpec.swift
+83 −0 Tests/SwiftCheckTests/FormatterSpec.swift
+82 −55 Tests/SwiftCheckTests/GenSpec.swift
+53 −46 Tests/SwiftCheckTests/LambdaSpec.swift
+11 −7 Tests/SwiftCheckTests/ModifierSpec.swift
+43 −37 Tests/SwiftCheckTests/PathSpec.swift
+42 −18 Tests/SwiftCheckTests/PropertySpec.swift
+8 −2 Tests/SwiftCheckTests/ReplaySpec.swift
+46 −40 Tests/SwiftCheckTests/RoseSpec.swift
+17 −8 Tests/SwiftCheckTests/ShrinkSpec.swift
+67 −68 Tests/SwiftCheckTests/SimpleSpec.swift
+13 −21 Tests/SwiftCheckTests/TestSpec.swift
+32 −97 Tutorial.playground/Contents.swift
+4 −0 Utilities/compile.sh
+3 −0 Utilities/gyb
+1,146 −0 Utilities/gyb.py
2 changes: 1 addition & 1 deletion Carthage/Checkouts/Swiftz
Submodule Swiftz updated 93 files
+2 −0 .gitignore
+10 −10 .travis.yml
+1 −1 Cartfile.private
+3 −3 Cartfile.resolved
+1 −1 Carthage/Checkouts/Operadics
+1 −1 Carthage/Checkouts/SwiftCheck
+1 −1 Carthage/Checkouts/Swiftx
+13 −0 Package.swift
+7 −0 README.md
+40 −0 Sources/Applicative.swift
+92 −159 Sources/ArrayExt.swift
+47 −36 Sources/Arrow.swift
+16 −11 Sources/ArrowExt.swift
+17 −11 Sources/Bifunctor.swift
+11 −6 Sources/Bounded.swift
+16 −11 Sources/Category.swift
+69 −16 Sources/CharacterExt.swift
+6 −5 Sources/Comonad.swift
+12 −8 Sources/Const.swift
+1 −1 Sources/Copointed.swift
+448 −0 Sources/Curry.swift
+281 −0 Sources/DictionaryExt.swift
+212 −0 Sources/EitherExt.swift
+4 −4 Sources/Foldable.swift
+21 −16 Sources/Function.swift
+2 −2 Sources/Functor.swift
+53 −41 Sources/HList.swift
+178 −0 Sources/Identity.swift
+0 −0 Sources/Info.plist
+1 −1 Sources/Kinds.swift
+164 −165 Sources/List.swift
+10 −10 Sources/Monad.swift
+24 −19 Sources/Monoid.swift
+9 −6 Sources/Monoidal.swift
+254 −0 Sources/NonEmptyList.swift
+51 −48 Sources/Num.swift
+220 −0 Sources/OptionalExt.swift
+1 −1 Sources/Pointed.swift
+40 −34 Sources/Proxy.swift
+18 −14 Sources/Ratio.swift
+181 −0 Sources/Reader.swift
+19 −14 Sources/Semigroup.swift
+199 −0 Sources/State.swift
+388 −0 Sources/Stream.swift
+71 −55 Sources/StringExt.swift
+0 −0 Sources/Swiftz.h
+32 −24 Sources/Those.swift
+2 −2 Sources/TupleExt.swift
+4 −3 Sources/Unit.swift
+208 −0 Sources/Writer.swift
+714 −727 Swiftz.xcodeproj/project.pbxproj
+1 −1 Swiftz.xcodeproj/xcshareddata/xcschemes/Swiftz-iOS.xcscheme
+1 −1 Swiftz.xcodeproj/xcshareddata/xcschemes/Swiftz-tvOS.xcscheme
+1 −1 Swiftz.xcodeproj/xcshareddata/xcschemes/Swiftz-watchOS.xcscheme
+1 −1 Swiftz.xcodeproj/xcshareddata/xcschemes/Swiftz.xcscheme
+0 −37 Swiftz/Applicative.swift
+0 −448 Swiftz/Curry.swift
+0 −261 Swiftz/DictionaryExt.swift
+0 −207 Swiftz/EitherExt.swift
+0 −175 Swiftz/Identity.swift
+0 −81 Swiftz/Maybe.swift
+0 −245 Swiftz/NonEmptyList.swift
+0 −214 Swiftz/OptionalExt.swift
+0 −174 Swiftz/Reader.swift
+0 −31 Swiftz/SYB.swift
+0 −193 Swiftz/State.swift
+0 −367 Swiftz/Stream.swift
+0 −198 Swiftz/Writer.swift
+0 −160 SwiftzTests/StreamSpec.swift
+0 −59 SwiftzTests/TupleExtSpec.swift
+0 −47 SwiftzTests/UnitSpec.swift
+0 −0 Tests/Info.plist
+13 −82 Tests/SwiftzTests/ArrayExtSpec.swift
+3 −3 Tests/SwiftzTests/ArrowExtSpec.swift
+11 −9 Tests/SwiftzTests/DictionaryExtSpec.swift
+9 −14 Tests/SwiftzTests/EitherSpec.swift
+14 −14 Tests/SwiftzTests/FunctionSpec.swift
+2 −2 Tests/SwiftzTests/FunctorSpec.swift
+8 −8 Tests/SwiftzTests/HListSpec.swift
+8 −8 Tests/SwiftzTests/IdentitySpec.swift
+12 −12 Tests/SwiftzTests/ListSpec.swift
+3 −3 Tests/SwiftzTests/MonoidSpec.swift
+11 −11 Tests/SwiftzTests/NonEmptyListSpec.swift
+7 −28 Tests/SwiftzTests/OptionalExtSpec.swift
+14 −12 Tests/SwiftzTests/ProxySpec.swift
+4 −4 Tests/SwiftzTests/ReaderSpec.swift
+3 −1 Tests/SwiftzTests/StateSpec.swift
+163 −0 Tests/SwiftzTests/StreamSpec.swift
+5 −13 Tests/SwiftzTests/StringExtSpec.swift
+2 −2 Tests/SwiftzTests/ThoseSpec.swift
+23 −0 Tests/SwiftzTests/TupleExtSpec.swift
+47 −0 Tests/SwiftzTests/UnitSpec.swift
+10 −10 Tests/SwiftzTests/WriterSpec.swift
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Tyro
======

Tyro used to be a Swift library for Functional JSON parsing and encoding. It is
now **deprecated**. Please use your favorite extension of `Dictionary` instead.
Tyro is a Swift library for Functional JSON parsing and encoding. It is now supported on this repo for swift 3 but used
to be maintained by [typelift](https://github.com/typelift/tyro).
6 changes: 3 additions & 3 deletions Tyro.podspec
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
Pod::Spec.new do |s|
s.name = "Tyro"
s.version = "0.0.8"
s.version = "0.1.0"
s.summary = "Functional JSON parsing and encoding."
s.homepage = "https://github.com/typelift/Tyro"
s.homepage = "https://github.com/OpenShelter/Tyro"
s.license = { :type => "BSD" }
s.authors = { "CodaFi" => "[email protected]", "pthariensflame" => "[email protected]", "mpurland" => "[email protected]" }

Expand All @@ -11,7 +11,7 @@ Pod::Spec.new do |s|
s.ios.deployment_target = "8.0"
s.tvos.deployment_target = "9.1"
s.watchos.deployment_target = "2.1"
s.source = { :git => "https://github.com/typelift/Tyro.git", :tag => "v#{s.version}", :submodules => true }
s.source = { :git => "https://github.com/OpenShelter/Tyro.git", :tag => "v#{s.version}", :submodules => true }
s.source_files = "Tyro/*.swift"
s.dependency "Swiftz"
end
23 changes: 10 additions & 13 deletions Tyro.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -786,9 +786,11 @@
};
DE702D0E1BFB28E20017CEE8 = {
CreatedOnToolsVersion = 7.1.1;
LastSwiftMigration = 0810;
};
DE702D171BFB28E30017CEE8 = {
CreatedOnToolsVersion = 7.1.1;
LastSwiftMigration = 0810;
};
};
};
Expand Down Expand Up @@ -1277,10 +1279,6 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Checkouts/Swiftz/Carthage/Checkouts/SwiftCheck/build/Debug-appletvos",
);
INFOPLIST_FILE = TyroTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.typelift.Tyro-tvOSTests";
Expand All @@ -1294,10 +1292,6 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Checkouts/Swiftz/Carthage/Checkouts/SwiftCheck/build/Debug-appletvos",
);
INFOPLIST_FILE = TyroTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.typelift.Tyro-tvOSTests";
Expand Down Expand Up @@ -1396,7 +1390,7 @@
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 2.3;
SWIFT_VERSION = 3.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
Expand Down Expand Up @@ -1440,8 +1434,7 @@
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 2.3;
SWIFT_VERSION = 3.0;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
Expand Down Expand Up @@ -1470,6 +1463,7 @@
PRODUCT_NAME = Tyro;
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 3.0;
};
name = Debug;
};
Expand All @@ -1493,6 +1487,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.typelift.Tyro;
PRODUCT_NAME = Tyro;
SKIP_INSTALL = YES;
SWIFT_VERSION = 3.0;
};
name = Release;
};
Expand All @@ -1505,7 +1500,6 @@
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/iOS",
"$(PROJECT_DIR)/Carthage/Checkouts/Swiftz/Carthage/Checkouts/SwiftCheck/build/Debug-iphoneos",
);
INFOPLIST_FILE = TyroTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
Expand All @@ -1525,7 +1519,6 @@
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Carthage/Build/iOS",
"$(PROJECT_DIR)/Carthage/Checkouts/Swiftz/Carthage/Checkouts/SwiftCheck/build/Debug-iphoneos",
);
INFOPLIST_FILE = TyroTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
Expand Down Expand Up @@ -1553,6 +1546,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SKIP_INSTALL = YES;
SWIFT_VERSION = 3.0;
};
name = Debug;
};
Expand All @@ -1574,6 +1568,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SKIP_INSTALL = YES;
SWIFT_VERSION = 3.0;
};
name = Release;
};
Expand All @@ -1589,6 +1584,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.typelift.TyroTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SWIFT_VERSION = 3.0;
};
name = Debug;
};
Expand All @@ -1604,6 +1600,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.typelift.TyroTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SWIFT_VERSION = 3.0;
};
name = Release;
};
Expand Down
38 changes: 19 additions & 19 deletions Tyro/Date.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,29 +10,29 @@ import Foundation
import Swiftz

public struct DateTimestampJSONConverter : FromJSON, ToJSON {
public typealias T = NSDate
public typealias T = Date

private init() {}
fileprivate init() {}

public static func fromJSON(value : JSONValue) -> Either<JSONError, NSDate> {
public static func fromJSON(_ value : JSONValue) -> Either<JSONError, Date> {
switch value {
case .Number(let value):
let date = NSDate(timeIntervalSince1970 : value.doubleValue / 1000.0)
let date = Date(timeIntervalSince1970 : value.doubleValue / 1000.0)
return .Right(date)
default:
return .Left(.TypeMismatch("NSDate timestamp", "\(value.dynamicType.self)"))
return .Left(.TypeMismatch("Date timestamp", "\(type(of: value).self)"))
}
}

public static func toJSON(date : NSDate) -> Either<JSONError, JSONValue> {
return .Right(.Number(NSNumber(unsignedLongLong : UInt64(date.timeIntervalSince1970 * 1000.0))))
public static func toJSON(_ date : Date) -> Either<JSONError, JSONValue> {
return .Right(.Number(NSNumber(value : UInt64(date.timeIntervalSince1970 * 1000.0))))
}
}

public struct DateTimestampJSONFormatter : JSONFormatterType {
public typealias T = DateTimestampJSONConverter.T

public private(set) var jsonValue : JSONValue?
public fileprivate(set) var jsonValue : JSONValue?

public init(_ jsonValue : JSONValue?) {
self.jsonValue = jsonValue
Expand All @@ -42,50 +42,50 @@ public struct DateTimestampJSONFormatter : JSONFormatterType {
jsonValue = nil
}

public func decodeEither(value : JSONValue) -> Either<JSONError, T> {
public func decodeEither(_ value : JSONValue) -> Either<JSONError, T> {
return DateTimestampJSONConverter.fromJSON(value)
}

public func encodeEither(value : T) -> Either<JSONError, JSONValue> {
public func encodeEither(_ value : T) -> Either<JSONError, JSONValue> {
return DateTimestampJSONConverter.toJSON(value)
}
}

public struct DateFormatJSONFormatter : JSONFormatterType {
public typealias T = NSDate
public typealias T = Date

public let dateFormat : String

public static let DefaultDateFormat = "yyyy'-'MM'-'dd HH':'mm':'ss ZZZ"

public private(set) var jsonValue : JSONValue?
public fileprivate(set) var jsonValue : JSONValue?

public init(_ jsonValue : JSONValue?, _ dateFormat : String = DateFormatJSONFormatter.DefaultDateFormat) {
self.dateFormat = dateFormat
self.jsonValue = jsonValue
}

public func decodeEither(value : JSONValue) -> Either<JSONError, T> {
public func decodeEither(_ value : JSONValue) -> Either<JSONError, T> {
switch value {
case .String(let value):
let formatter = NSDateFormatter()
let formatter = DateFormatter()
formatter.dateFormat = dateFormat
let date = formatter.dateFromString(value)
let date = formatter.date(from: value)
if let date = date {
return .Right(date)
}
else {
return .Left(.Custom("Could not format value (\(value)) to format (\(formatter.dateFormat))"))
}
default:
return .Left(.TypeMismatch("NSDate format", "\(value.dynamicType.self)"))
return .Left(.TypeMismatch("Date format", "\(type(of: value).self)"))
}
}

public func encodeEither(value : T) -> Either<JSONError, JSONValue> {
let formatter = NSDateFormatter()
public func encodeEither(_ value : T) -> Either<JSONError, JSONValue> {
let formatter = DateFormatter()
formatter.dateFormat = dateFormat
let string = formatter.stringFromDate(value)
let string = formatter.string(from: value)
return .Right(.String(string))
}
}
16 changes: 9 additions & 7 deletions Tyro/DecimalNumber.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,36 +12,38 @@ import Swiftz
public struct DecimalNumberJSONConverter : FromJSON, ToJSON {
public typealias T = NSDecimalNumber

private init() {}
fileprivate init() {}

public static func fromJSON(value : JSONValue) -> Either<JSONError, NSDecimalNumber> {
public static func fromJSON(_ value : JSONValue) -> Either<JSONError, NSDecimalNumber> {
switch value {
case .Number(let n):
return .Right(NSDecimalNumber(decimal : n.decimalValue))
default:
return .Left(.TypeMismatch("NSDecimalNumber JSON", "\(value.dynamicType.self)"))
return .Left(.TypeMismatch("DecimalNumber JSON", "\(type(of: value).self)"))
}
}

public static func toJSON(dn : NSDecimalNumber) -> Either<JSONError, JSONValue> {
public static func toJSON(_ dn : NSDecimalNumber) -> Either<JSONError, JSONValue> {
return .Right(.Number(dn))
}
}

public struct DecimalNumberJSONFormatter : JSONFormatterType {

public typealias T = DecimalNumberJSONConverter.T

public private(set) var jsonValue : JSONValue?
public fileprivate(set) var jsonValue : JSONValue?

public init(_ jsonValue : JSONValue?) {
self.jsonValue = jsonValue
}

public func decodeEither(value : JSONValue) -> Either<JSONError, T> {
public func decodeEither(_ value : JSONValue) -> Either<JSONError, T> {
return DecimalNumberJSONConverter.fromJSON(value)
}

public func encodeEither(value : T) -> Either<JSONError, JSONValue> {
public func encodeEither(_ value : T) -> Either<JSONError, JSONValue> {
return DecimalNumberJSONConverter.toJSON(value)
}

}
19 changes: 10 additions & 9 deletions Tyro/Decoder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,38 +11,39 @@ import Swiftz

public protocol JSONDecoderType {
associatedtype DecodedType = AnyObject
func decodeEither(value : JSONValue) -> Either<JSONError, DecodedType>
func decode(value : JSONValue) -> DecodedType?
func decodeEither(_ value : JSONValue) -> Either<JSONError, DecodedType>
func decode(_ value : JSONValue) -> DecodedType?
}

public class JSONDecoder : JSONDecoderType {
public static let decoder = JSONDecoder()
private init() {}
fileprivate init() {}

public func decodeEither(value : JSONValue) -> Either<JSONError, AnyObject> {
public func decodeEither(_ value : JSONValue) -> Either<JSONError, AnyObject> {
switch value {
case .Array(let values):
return .Right(values.flatMap { $0.anyObject })

return Either.Right( values.flatMap{ $0.anyObject } as AnyObject )
case .Object(let value):
return .Right(value.mapMaybe { $0.anyObject })
return .Right(value.mapMaybe{ $0.anyObject } as AnyObject)
case .Number(let n):
return .Right(n)
case .String(let s):
return .Right(s)
return .Right(s as AnyObject)
case .Null:
return .Right(NSNull())
}
}
}

extension JSONDecoderType {
public func decode(value : JSONValue) -> DecodedType? {
public func decode(_ value : JSONValue) -> DecodedType? {
return decodeEither(value).right
}
}

extension JSONValue : JSONDecoderType {
public func decodeEither(value : JSONValue) -> Either<JSONError, JSONValue> {
public func decodeEither(_ value : JSONValue) -> Either<JSONError, JSONValue> {
return jsonValue.toEither(.Custom("Could not decode JSONValue from JSONValue. There must be a problem."))
}
}
Expand Down
Loading

0 comments on commit 1ffb3cc

Please sign in to comment.