├── Cartfile.private
├── Cartfile
├── Pistachiargo
├── Pistachiargo.h
├── Info.plist
├── JSONAdapter.swift
└── JSONValueTransformers.swift
├── Cartfile.resolved
├── PistachiargoTests
├── Fixtures
│ └── Node.swift
├── Info.plist
├── JSONAdapterSpec.swift
└── JSONValueTransformersSpec.swift
├── LICENSE
├── README.md
└── Pistachiargo.xcodeproj
├── xcshareddata
└── xcschemes
│ ├── Pistachiargo-Mac.xcscheme
│ └── Pistachiargo-iOS.xcscheme
└── project.pbxproj
/Cartfile.private:
--------------------------------------------------------------------------------
1 | github "Quick/Quick" ~> 0.3
2 | github "Quick/Nimble" ~> 0.4
3 |
--------------------------------------------------------------------------------
/Cartfile:
--------------------------------------------------------------------------------
1 | github "felixjendrusch/Pistachio" ~> 0.2
2 | github "thoughtbot/Argo" ~> 0.4
3 |
--------------------------------------------------------------------------------
/Pistachiargo/Pistachiargo.h:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2015 Felix Jendrusch. All rights reserved.
2 |
3 | @import Foundation;
4 |
5 | //! Project version number for Pistachiargo.
6 | FOUNDATION_EXPORT double PistachiargoVersionNumber;
7 |
8 | //! Project version string for Pistachiargo.
9 | FOUNDATION_EXPORT const unsigned char PistachiargoVersionString[];
10 |
--------------------------------------------------------------------------------
/Cartfile.resolved:
--------------------------------------------------------------------------------
1 | github "robrix/Box" "1.2.2"
2 | github "robb/Monocle" "0.0.2"
3 | github "Quick/Nimble" "v0.4.2"
4 | github "Quick/Quick" "v0.3.1"
5 | github "thoughtbot/runes" "v1.2.2"
6 | github "thoughtbot/Argo" "v0.4.3"
7 | github "antitypical/Result" "0.4.1"
8 | github "felixjendrusch/ValueTransformer" "2.2.2"
9 | github "felixjendrusch/Pistachio" "0.2.2"
10 |
--------------------------------------------------------------------------------
/PistachiargoTests/Fixtures/Node.swift:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2015 Felix Jendrusch. All rights reserved.
2 |
3 | import Monocle
4 | import Pistachio
5 | import Pistachiargo
6 |
7 | struct Node: Equatable {
8 | var children: [Node]
9 |
10 | init(children: [Node]) {
11 | self.children = children
12 | }
13 | }
14 |
15 | func == (lhs: Node, rhs: Node) -> Bool {
16 | return lhs.children == rhs.children
17 | }
18 |
19 | struct NodeLenses {
20 | static let children = Lens(get: { $0.children }, set: { (inout node: Node, children) in
21 | node.children = children
22 | })
23 | }
24 |
25 | struct NodeAdapters {
26 | static let json = fix { adapter in
27 | return JSONAdapter(specification: [
28 | "children": JSONArray(NodeLenses.children)(adapter: adapter)
29 | ], value: Node(children: []))
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/PistachiargoTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | is.felixjendrusch.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Pistachiargo/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | is.felixjendrusch.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/PistachiargoTests/JSONAdapterSpec.swift:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2015 Felix Jendrusch. All rights reserved.
2 |
3 | import Quick
4 | import Nimble
5 |
6 | import Argo
7 |
8 | class JSONAdapterSpec: QuickSpec {
9 | override func spec() {
10 | describe("A JSONAdapter") {
11 | let adapter = NodeAdapters.json
12 |
13 | let value = Node(children: [ Node(children: []), Node(children: []) ])
14 | let transformedValue: JSONValue = .JSONObject([
15 | "children": .JSONArray([
16 | .JSONObject([ "children": .JSONArray([]) ]),
17 | .JSONObject([ "children": .JSONArray([]) ])
18 | ])
19 | ])
20 |
21 | it("should transform a value") {
22 | let result = adapter.transform(value)
23 |
24 | expect(result.value).to(equal(transformedValue))
25 | }
26 |
27 | it("should reverse transform a value") {
28 | let result = adapter.reverseTransform(transformedValue)
29 |
30 | expect(result.value).to(equal(value))
31 | }
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Felix Jendrusch
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Pistachiargo/JSONAdapter.swift:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2015 Felix Jendrusch. All rights reserved.
2 |
3 | import Foundation
4 |
5 | import Result
6 | import Pistachio
7 | import Argo
8 |
9 | public struct JSONAdapter: AdapterType {
10 | private typealias Adapter = DictionaryAdapter
11 | private let adapter: Adapter
12 |
13 | public init(specification: Adapter.Specification, valueClosure: JSONValue -> Result) {
14 | adapter = DictionaryAdapter(specification: specification, dictionaryTransformer: JSONValueTransformers.dictionary, valueClosure: valueClosure)
15 | }
16 |
17 | public init(specification: Adapter.Specification, @autoclosure(escaping) value: () -> Value) {
18 | self.init(specification: specification, valueClosure: { _ in
19 | return Result.success(value())
20 | })
21 | }
22 |
23 | public func transform(value: Value) -> Result {
24 | return adapter.transform(value)
25 | }
26 |
27 | public func reverseTransform(transformedValue: JSONValue) -> Result {
28 | return adapter.reverseTransform(transformedValue)
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Pistachiargo
2 |
3 | Pistachiargo is a model framework using [Argo](https://github.com/thoughtbot/Argo). It's based on [Pistachio](https://github.com/felixjendrusch/Pistachio).
4 |
5 | ## Installation
6 |
7 | ### Carthage
8 |
9 | [Carthage](https://github.com/Carthage/Carthage) is a simple, decentralized dependency manager for Cocoa.
10 |
11 | 1. Add Pistachiargo to your [Cartfile](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile):
12 |
13 | ```
14 | github "felixjendrusch/Pistachiargo" ~> 0.2
15 | ```
16 |
17 | 2. Run `carthage update` to fetch and build Pistachiargo and its dependencies.
18 |
19 | 3. [Make sure your application's target links against `Pistachiargo.framework` and copies all relevant frameworks into its application bundle (iOS); or embeds the binaries of all relevant frameworks (Mac).](https://github.com/carthage/carthage#getting-started)
20 |
21 | ## Usage
22 |
23 | Like [Pistachio](https://github.com/felixjendrusch/Pistachio), Pistachiargo leverages [lenses](http://chris.eidhof.nl/posts/lenses-in-swift.html) and value transformers to create type safe adapters. Let's start by defining a very simple model:
24 |
25 | ```swift
26 | struct Origin {
27 | var city: String
28 |
29 | init(city: String = "") {
30 | self.city = city
31 | }
32 | }
33 | ```
34 |
35 | ```swift
36 | struct Person {
37 | var name: String
38 | var age: Int
39 | var origin: Origin?
40 | var children: [Person]?
41 |
42 | init(name: String = "", age: Int = 0, origin: Origin? = nil, children: [Person]? = nil) {
43 | self.name = name
44 | self.age = age
45 | self.origin = origin
46 | self.children = children
47 | }
48 | }
49 | ```
50 |
51 | A lens is basically just a combination of a getter and a setter, providing a view on your model:
52 |
53 | ```swift
54 | struct OriginLenses {
55 | static let city = Lens(get: { $0.city }, set: { (inout origin: Origin, city) in
56 | origin.city = city
57 | })
58 | }
59 | ```
60 |
61 | ```swift
62 | struct PersonLenses {
63 | static let name = Lens(get: { $0.name }, set: { (inout person: Person, name) in
64 | person.name = name
65 | })
66 |
67 | static let age = Lens(get: { $0.age }, set: { (inout person: Person, age) in
68 | person.age = age
69 | })
70 |
71 | static let origin = Lens(get: { $0.origin }, set: { (inout person: Person, origin) in
72 | person.origin = origin
73 | })
74 |
75 | static let children = Lens(get: { $0.children }, set: { (inout person: Person, children) in
76 | person.children = children
77 | })
78 | }
79 | ```
80 |
81 | However, Pistachiargo ships with a lot of JSON value transformers, convenience functions and a JSON adapter:
82 |
83 | ```swift
84 | struct JSONAdapters {
85 | static let origin = JSONAdapter(specification: [
86 | "city_name": JSONString(OriginLenses.city)
87 | ], value: Origin())
88 |
89 | static let person = fix { adapter in
90 | return JSONAdapter(specification: [
91 | "name": JSONString(PersonLenses.name),
92 | "age": JSONNumber(PersonLenses.age),
93 | "origin": JSONObject(PersonLenses.origin)(adapter: origin),
94 | "children": JSONArray(PersonLenses.children)(adapter: adapter)
95 | ], value: Person())
96 | }
97 | }
98 | ```
99 |
100 | JSON adapters handle transforming and reverse transforming your models:
101 |
102 | ```swift
103 | let adapter = JSONAdapters.person
104 |
105 | var person = Person(name: "Felix", origin: Origin(city: "Berlin"))
106 | var data = adapter.transform(person)
107 | // == .Success(Box(.JSONObject([
108 | // "name": .JSONString("Felix"),
109 | // "age": .JSONNumber(0),
110 | // "origin": .JSONObject([
111 | // "city_name": .JSONString("Berlin")
112 | // ]),
113 | // "children": .JSONNull
114 | // ])))
115 |
116 | adapter.reverseTransform(data.value!)
117 | // == .Success(Box(person))
118 | ```
119 |
120 | Both `transform` and `reverseTransform` return a [`Result`](https://github.com/antitypical/Result/blob/master/Result/Result.swift), which either holds the (reverse) transformed value or an error. This enables you to gracefully handle transformation errors.
121 |
122 | ## Posts
123 |
124 | - [Working with immutable models in Swift](https://github.com/felixjendrusch/blog/blob/master/_posts/2015-02-14-working-with-immutable-models-in-swift.md) (February 14, 2015)
125 |
--------------------------------------------------------------------------------
/Pistachiargo.xcodeproj/xcshareddata/xcschemes/Pistachiargo-Mac.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
47 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
65 |
66 |
75 |
76 |
82 |
83 |
84 |
85 |
86 |
87 |
93 |
94 |
100 |
101 |
102 |
103 |
105 |
106 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/Pistachiargo.xcodeproj/xcshareddata/xcschemes/Pistachiargo-iOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
47 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
65 |
66 |
75 |
76 |
82 |
83 |
84 |
85 |
86 |
87 |
93 |
94 |
100 |
101 |
102 |
103 |
105 |
106 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/PistachiargoTests/JSONValueTransformersSpec.swift:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2015 Felix Jendrusch. All rights reserved.
2 |
3 | import Quick
4 | import Nimble
5 |
6 | import Argo
7 | import Pistachiargo
8 |
9 | class JSONValueTransformersSpec: QuickSpec {
10 | override func spec() {
11 | describe("An NSNumber to JSONValue value transformer") {
12 | let valueTransformer = JSONValueTransformers.nsNumber
13 |
14 | it("should transform a value") {
15 | let result = valueTransformer.transform(NSNumber(integer: 1))
16 |
17 | expect(result.value).to(equal(JSONValue.JSONNumber(1)))
18 | }
19 |
20 | it("should reverse transform a value") {
21 | let result = valueTransformer.reverseTransform(.JSONNumber(2.5))
22 |
23 | expect(result.value).to(equal(NSNumber(float: 2.5)))
24 | }
25 |
26 | it("should fail if its value transformation fails") {
27 | let result = valueTransformer.reverseTransform(.JSONString("3"))
28 |
29 | expect(result.value).to(beNil())
30 | }
31 | }
32 |
33 | describe("A String to JSONValue value transformer") {
34 | let valueTransformer = JSONValueTransformers.string
35 |
36 | it("should transform a value") {
37 | let result = valueTransformer.transform("foo")
38 |
39 | expect(result.value).to(equal(JSONValue.JSONString("foo")))
40 | }
41 |
42 | it("should reverse transform a value") {
43 | let result = valueTransformer.reverseTransform(.JSONString("bar"))
44 |
45 | expect(result.value).to(equal("bar"))
46 | }
47 |
48 | it("should fail if its value transformation fails") {
49 | let result = valueTransformer.reverseTransform(.JSONArray([ .JSONString("foobar") ]))
50 |
51 | expect(result.value).to(beNil())
52 | }
53 | }
54 |
55 | describe("A Bool to JSONValue value transformer") {
56 | let valueTransformer = JSONValueTransformers.bool
57 |
58 | it("should transform a value") {
59 | let result = valueTransformer.transform(true)
60 |
61 | expect(result.value).to(equal(JSONValue.JSONNumber(true)))
62 | }
63 |
64 | it("should reverse transform a value") {
65 | let result = valueTransformer.reverseTransform(.JSONNumber(false))
66 |
67 | expect(result.value).to(equal(false))
68 | }
69 |
70 | it("should fail if its value transformation fails") {
71 | let result = valueTransformer.reverseTransform(.JSONString("foobar"))
72 |
73 | expect(result.value).to(beNil())
74 | }
75 | }
76 |
77 | describe("A [String: JSONValue] to JSONValue value transformer") {
78 | let valueTransformer = JSONValueTransformers.dictionary
79 |
80 | it("should transform a value") {
81 | let result = valueTransformer.transform([ "foo": .JSONString("bar") ])
82 |
83 | expect(result.value).to(equal(JSONValue.JSONObject([ "foo": .JSONString("bar") ])))
84 | }
85 |
86 | it("should reverse transform a value") {
87 | let result = valueTransformer.reverseTransform(.JSONObject([ "bar": .JSONString("foo") ]))
88 |
89 | expect(result.value).to(equal([ "bar": .JSONString("foo") ]))
90 | }
91 |
92 | it("should fail if its value transformation fails") {
93 | let result = valueTransformer.reverseTransform(.JSONString("foobar"))
94 |
95 | expect(result.value).to(beNil())
96 | }
97 | }
98 |
99 | describe("A [JSONValue] to JSONValue value transformer") {
100 | let valueTransformer = JSONValueTransformers.array
101 |
102 | it("should transform a value") {
103 | let result = valueTransformer.transform([ .JSONString("foo") ])
104 |
105 | expect(result.value).to(equal(JSONValue.JSONArray([ .JSONString("foo") ])))
106 | }
107 |
108 | it("should reverse transform a value") {
109 | let result = valueTransformer.reverseTransform(.JSONArray([ .JSONString("bar") ]))
110 |
111 | expect(result.value).to(equal([ .JSONString("bar") ]))
112 | }
113 |
114 | it("should fail if its value transformation fails") {
115 | let result = valueTransformer.reverseTransform(.JSONString("foobar"))
116 |
117 | expect(result.value).to(beNil())
118 | }
119 | }
120 | }
121 | }
122 |
--------------------------------------------------------------------------------
/Pistachiargo/JSONValueTransformers.swift:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2015 Felix Jendrusch. All rights reserved.
2 |
3 | import Foundation
4 |
5 | import Result
6 | import ValueTransformer
7 | import Monocle
8 | import Pistachio
9 | import Argo
10 |
11 | public let ErrorDomain = "PistachiargoErrorDomain"
12 | public let ErrorInvalidInput = 1
13 |
14 | public struct JSONValueTransformers {
15 | public static let nsNumber: ReversibleValueTransformer = ReversibleValueTransformer(transformClosure: { value in
16 | return Result.success(.JSONNumber(value))
17 | }, reverseTransformClosure: { transformedValue in
18 | switch transformedValue {
19 | case let .JSONNumber(value):
20 | return Result.success(value)
21 | default:
22 | let userInfo = [
23 | NSLocalizedDescriptionKey: NSLocalizedString("Could not transform JSONValue to NSNumber", comment: ""),
24 | NSLocalizedFailureReasonErrorKey: String(format: NSLocalizedString("Expected a .JSONNumber, got: %@.", comment: ""), transformedValue.description)
25 | ]
26 |
27 | return Result.failure(NSError(domain: ErrorDomain, code: ErrorInvalidInput, userInfo: userInfo))
28 | }
29 | })
30 |
31 | public static func number() -> ReversibleValueTransformer {
32 | return NSNumberValueTransformers.char() >>> nsNumber
33 | }
34 |
35 | public static func number() -> ReversibleValueTransformer {
36 | return NSNumberValueTransformers.unsignedChar() >>> nsNumber
37 | }
38 |
39 | public static func number() -> ReversibleValueTransformer {
40 | return NSNumberValueTransformers.short() >>> nsNumber
41 | }
42 |
43 | public static func number() -> ReversibleValueTransformer {
44 | return NSNumberValueTransformers.unsignedShort() >>> nsNumber
45 | }
46 |
47 | public static func number() -> ReversibleValueTransformer {
48 | return NSNumberValueTransformers.int() >>> nsNumber
49 | }
50 |
51 | public static func number() -> ReversibleValueTransformer {
52 | return NSNumberValueTransformers.unsignedInt() >>> nsNumber
53 | }
54 |
55 | public static func number() -> ReversibleValueTransformer {
56 | return NSNumberValueTransformers.long() >>> nsNumber
57 | }
58 |
59 | public static func number() -> ReversibleValueTransformer {
60 | return NSNumberValueTransformers.unsignedLong() >>> nsNumber
61 | }
62 |
63 | public static func number() -> ReversibleValueTransformer {
64 | return NSNumberValueTransformers.longLong() >>> nsNumber
65 | }
66 |
67 | public static func number() -> ReversibleValueTransformer {
68 | return NSNumberValueTransformers.unsignedLongLong() >>> nsNumber
69 | }
70 |
71 | public static func number() -> ReversibleValueTransformer {
72 | return NSNumberValueTransformers.float() >>> nsNumber
73 | }
74 |
75 | public static func number() -> ReversibleValueTransformer {
76 | return NSNumberValueTransformers.double() >>> nsNumber
77 | }
78 |
79 | public static func number() -> ReversibleValueTransformer {
80 | return NSNumberValueTransformers.bool() >>> nsNumber
81 | }
82 |
83 | public static let bool: ReversibleValueTransformer = ReversibleValueTransformer(transformClosure: { value in
84 | return Result.success(.JSONNumber(value))
85 | }, reverseTransformClosure: { transformedValue in
86 | switch transformedValue {
87 | case let .JSONNumber(value):
88 | return Result.success(value.boolValue)
89 | default:
90 | let userInfo = [
91 | NSLocalizedDescriptionKey: NSLocalizedString("Could not transform JSONValue to Bool", comment: ""),
92 | NSLocalizedFailureReasonErrorKey: String(format: NSLocalizedString("Expected a .JSONNumber, got: %@.", comment: ""), transformedValue.description)
93 | ]
94 |
95 | return Result.failure(NSError(domain: ErrorDomain, code: ErrorInvalidInput, userInfo: userInfo))
96 | }
97 | })
98 |
99 | public static let string: ReversibleValueTransformer = ReversibleValueTransformer(transformClosure: { value in
100 | return Result.success(.JSONString(value))
101 | }, reverseTransformClosure: { transformedValue in
102 | switch transformedValue {
103 | case let .JSONString(value):
104 | return Result.success(value)
105 | default:
106 | let userInfo = [
107 | NSLocalizedDescriptionKey: NSLocalizedString("Could not transform JSONValue to String", comment: ""),
108 | NSLocalizedFailureReasonErrorKey: String(format: NSLocalizedString("Expected a .JSONString, got: %@.", comment: ""), transformedValue.description)
109 | ]
110 |
111 | return Result.failure(NSError(domain: ErrorDomain, code: ErrorInvalidInput, userInfo: userInfo))
112 | }
113 | })
114 |
115 | public static let dictionary: ReversibleValueTransformer<[String: JSONValue], JSONValue, NSError> = ReversibleValueTransformer(transformClosure: { value in
116 | return Result.success(.JSONObject(value))
117 | }, reverseTransformClosure: { transformedValue in
118 | switch transformedValue {
119 | case let .JSONObject(value):
120 | return Result.success(value)
121 | default:
122 | let userInfo = [
123 | NSLocalizedDescriptionKey: NSLocalizedString("Could not transform JSONValue to [String: JSONValue]", comment: ""),
124 | NSLocalizedFailureReasonErrorKey: String(format: NSLocalizedString("Expected a .JSONObject, got: %@.", comment: ""), transformedValue.description)
125 | ]
126 |
127 | return Result.failure(NSError(domain: ErrorDomain, code: ErrorInvalidInput, userInfo: userInfo))
128 | }
129 | })
130 |
131 | public static let array: ReversibleValueTransformer<[JSONValue], JSONValue, NSError> = ReversibleValueTransformer(transformClosure: { value in
132 | return Result.success(.JSONArray(value))
133 | }, reverseTransformClosure: { transformedValue in
134 | switch transformedValue {
135 | case let .JSONArray(value):
136 | return Result.success(value)
137 | default:
138 | let userInfo = [
139 | NSLocalizedDescriptionKey: NSLocalizedString("Could not transform JSONValue to [JSONValue]", comment: ""),
140 | NSLocalizedFailureReasonErrorKey: String(format: NSLocalizedString("Expected a .JSONArray, got: %@.", comment: ""), transformedValue.description)
141 | ]
142 |
143 | return Result.failure(NSError(domain: ErrorDomain, code: ErrorInvalidInput, userInfo: userInfo))
144 | }
145 | })
146 | }
147 |
148 | public func JSONNumber(lens: Lens) -> Lens, Result> {
149 | return map(lens, JSONValueTransformers.number())
150 | }
151 |
152 | public func JSONNumber(lens: Lens, defaultTransformedValue: JSONValue = .JSONNumber(0)) -> Lens, Result> {
153 | return map(lens, lift(JSONValueTransformers.number(), defaultTransformedValue: defaultTransformedValue))
154 | }
155 |
156 | public func JSONNumber(lens: Lens) -> Lens, Result> {
157 | return map(lens, JSONValueTransformers.number())
158 | }
159 |
160 | public func JSONNumber(lens: Lens, defaultTransformedValue: JSONValue = .JSONNumber(0)) -> Lens, Result> {
161 | return map(lens, lift(JSONValueTransformers.number(), defaultTransformedValue: defaultTransformedValue))
162 | }
163 |
164 | public func JSONNumber(lens: Lens) -> Lens, Result> {
165 | return map(lens, JSONValueTransformers.number())
166 | }
167 |
168 | public func JSONNumber(lens: Lens, defaultTransformedValue: JSONValue = .JSONNumber(0)) -> Lens, Result> {
169 | return map(lens, lift(JSONValueTransformers.number(), defaultTransformedValue: defaultTransformedValue))
170 | }
171 |
172 | public func JSONNumber(lens: Lens) -> Lens, Result> {
173 | return map(lens, JSONValueTransformers.number())
174 | }
175 |
176 | public func JSONNumber(lens: Lens, defaultTransformedValue: JSONValue = .JSONNumber(0)) -> Lens, Result> {
177 | return map(lens, lift(JSONValueTransformers.number(), defaultTransformedValue: defaultTransformedValue))
178 | }
179 |
180 | public func JSONNumber(lens: Lens) -> Lens, Result> {
181 | return map(lens, JSONValueTransformers.number())
182 | }
183 |
184 | public func JSONNumber(lens: Lens, defaultTransformedValue: JSONValue = .JSONNumber(0)) -> Lens, Result> {
185 | return map(lens, lift(JSONValueTransformers.number(), defaultTransformedValue: defaultTransformedValue))
186 | }
187 |
188 | public func JSONNumber(lens: Lens) -> Lens, Result> {
189 | return map(lens, JSONValueTransformers.number())
190 | }
191 |
192 | public func JSONNumber(lens: Lens, defaultTransformedValue: JSONValue = .JSONNumber(0)) -> Lens, Result> {
193 | return map(lens, lift(JSONValueTransformers.number(), defaultTransformedValue: defaultTransformedValue))
194 | }
195 |
196 | public func JSONNumber(lens: Lens) -> Lens, Result> {
197 | return map(lens, JSONValueTransformers.number())
198 | }
199 |
200 | public func JSONNumber(lens: Lens, defaultTransformedValue: JSONValue = .JSONNumber(0)) -> Lens, Result> {
201 | return map(lens, lift(JSONValueTransformers.number(), defaultTransformedValue: defaultTransformedValue))
202 | }
203 |
204 | public func JSONNumber(lens: Lens) -> Lens, Result> {
205 | return map(lens, JSONValueTransformers.number())
206 | }
207 |
208 | public func JSONNumber(lens: Lens, defaultTransformedValue: JSONValue = .JSONNumber(0)) -> Lens, Result> {
209 | return map(lens, lift(JSONValueTransformers.number(), defaultTransformedValue: defaultTransformedValue))
210 | }
211 |
212 | public func JSONNumber(lens: Lens) -> Lens, Result> {
213 | return map(lens, JSONValueTransformers.number())
214 | }
215 |
216 | public func JSONNumber(lens: Lens, defaultTransformedValue: JSONValue = .JSONNumber(0)) -> Lens, Result> {
217 | return map(lens, lift(JSONValueTransformers.number(), defaultTransformedValue: defaultTransformedValue))
218 | }
219 |
220 | public func JSONNumber(lens: Lens) -> Lens, Result> {
221 | return map(lens, JSONValueTransformers.number())
222 | }
223 |
224 | public func JSONNumber(lens: Lens, defaultTransformedValue: JSONValue = .JSONNumber(0)) -> Lens, Result> {
225 | return map(lens, lift(JSONValueTransformers.number(), defaultTransformedValue: defaultTransformedValue))
226 | }
227 |
228 | public func JSONNumber(lens: Lens) -> Lens, Result> {
229 | return map(lens, JSONValueTransformers.number())
230 | }
231 |
232 | public func JSONNumber(lens: Lens, defaultTransformedValue: JSONValue = .JSONNumber(0.0)) -> Lens, Result> {
233 | return map(lens, lift(JSONValueTransformers.number(), defaultTransformedValue: defaultTransformedValue))
234 | }
235 |
236 | public func JSONNumber(lens: Lens) -> Lens, Result> {
237 | return map(lens, JSONValueTransformers.number())
238 | }
239 |
240 | public func JSONNumber(lens: Lens, defaultTransformedValue: JSONValue = .JSONNumber(0.0)) -> Lens, Result> {
241 | return map(lens, lift(JSONValueTransformers.number(), defaultTransformedValue: defaultTransformedValue))
242 | }
243 |
244 | public func JSONNumber(lens: Lens) -> Lens, Result> {
245 | return map(lens, JSONValueTransformers.number())
246 | }
247 |
248 | public func JSONNumber(lens: Lens, defaultTransformedValue: JSONValue = .JSONNumber(0)) -> Lens, Result> {
249 | return map(lens, lift(JSONValueTransformers.number(), defaultTransformedValue: defaultTransformedValue))
250 | }
251 |
252 | public func JSONBool(lens: Lens) -> Lens, Result> {
253 | return map(lens, JSONValueTransformers.bool)
254 | }
255 |
256 | public func JSONBool(lens: Lens, defaultTransformedValue: JSONValue = .JSONNumber(false)) -> Lens, Result> {
257 | return map(lens, lift(JSONValueTransformers.bool, defaultTransformedValue: defaultTransformedValue))
258 | }
259 |
260 | public func JSONString(lens: Lens) -> Lens, Result> {
261 | return map(lens, JSONValueTransformers.string)
262 | }
263 |
264 | public func JSONString(lens: Lens, defaultTransformedValue: JSONValue = .JSONString("")) -> Lens, Result> {
265 | return map(lens, lift(JSONValueTransformers.string, defaultTransformedValue: defaultTransformedValue))
266 | }
267 |
268 | public func JSONObject(lens: Lens) -> (adapter: T) -> Lens, Result> {
269 | return { adapter in
270 | return map(lens, adapter)
271 | }
272 | }
273 |
274 | public func JSONObject(lens: Lens, defaultTransformedValue: JSONValue = .JSONNull) -> (adapter: T) -> Lens, Result> {
275 | return { adapter in
276 | return map(lens, lift(adapter, defaultTransformedValue: defaultTransformedValue))
277 | }
278 | }
279 |
280 | public func JSONArray(lens: Lens) -> (adapter: T) -> Lens, Result> {
281 | return { adapter in
282 | return map(lens, lift(adapter) >>> JSONValueTransformers.array)
283 | }
284 | }
285 |
286 | public func JSONArray(lens: Lens, defaultTransformedValue: JSONValue = .JSONNull) -> (adapter: T) -> Lens, Result> {
287 | return { adapter in
288 | return map(lens, lift(lift(adapter) >>> JSONValueTransformers.array, defaultTransformedValue: defaultTransformedValue))
289 | }
290 | }
291 |
--------------------------------------------------------------------------------
/Pistachiargo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | DC2980121AE70855005AA6D6 /* Node.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC2980111AE70855005AA6D6 /* Node.swift */; };
11 | DC2980131AE70855005AA6D6 /* Node.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC2980111AE70855005AA6D6 /* Node.swift */; };
12 | DCA5B9B91A8AC74800667D32 /* Pistachiargo.h in Headers */ = {isa = PBXBuildFile; fileRef = DCA5B9B81A8AC74800667D32 /* Pistachiargo.h */; settings = {ATTRIBUTES = (Public, ); }; };
13 | DCA5B9BF1A8AC74800667D32 /* Pistachiargo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCA5B9B31A8AC74800667D32 /* Pistachiargo.framework */; };
14 | DCA5B9D41A8AC89700667D32 /* JSONAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA5B9D11A8AC89700667D32 /* JSONAdapter.swift */; };
15 | DCA5B9D51A8AC89700667D32 /* JSONValueTransformers.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA5B9D21A8AC89700667D32 /* JSONValueTransformers.swift */; };
16 | DCA5B9DA1A8AC93700667D32 /* JSONAdapterSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA5B9D71A8AC93700667D32 /* JSONAdapterSpec.swift */; };
17 | DCA5B9DB1A8AC93700667D32 /* JSONValueTransformersSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA5B9D81A8AC93700667D32 /* JSONValueTransformersSpec.swift */; };
18 | DCA5B9DF1A8ACA2700667D32 /* Argo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCA5B9DD1A8ACA2700667D32 /* Argo.framework */; };
19 | DCA5B9E01A8ACA2700667D32 /* Pistachio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCA5B9DE1A8ACA2700667D32 /* Pistachio.framework */; };
20 | DCA5B9E51A8ACA4900667D32 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCA5B9E31A8ACA4900667D32 /* Nimble.framework */; };
21 | DCA5B9E61A8ACA4900667D32 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCA5B9E41A8ACA4900667D32 /* Quick.framework */; };
22 | DCC73FE61AE6B67100D7F341 /* Pistachiargo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCC73FDB1AE6B67100D7F341 /* Pistachiargo.framework */; };
23 | DCC73FFE1AE6B79E00D7F341 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCC73FFA1AE6B74E00D7F341 /* Result.framework */; };
24 | DCC73FFF1AE6B79E00D7F341 /* ValueTransformer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCC73FFC1AE6B74E00D7F341 /* ValueTransformer.framework */; };
25 | DCC740001AE6B79E00D7F341 /* Pistachio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCC73FF81AE6B74E00D7F341 /* Pistachio.framework */; };
26 | DCC740011AE6B79E00D7F341 /* Argo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCC73FF51AE6B74E00D7F341 /* Argo.framework */; };
27 | DCC740021AE6B7AA00D7F341 /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCC73FFA1AE6B74E00D7F341 /* Result.framework */; };
28 | DCC740031AE6B7AA00D7F341 /* ValueTransformer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCC73FFC1AE6B74E00D7F341 /* ValueTransformer.framework */; };
29 | DCC740041AE6B7AA00D7F341 /* Pistachio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCC73FF81AE6B74E00D7F341 /* Pistachio.framework */; };
30 | DCC740051AE6B7AA00D7F341 /* Argo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCC73FF51AE6B74E00D7F341 /* Argo.framework */; };
31 | DCC740071AE6B7B600D7F341 /* Quick.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCC73FF91AE6B74E00D7F341 /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
32 | DCC740081AE6B7B600D7F341 /* Nimble.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCC73FF71AE6B74E00D7F341 /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
33 | DCC740091AE6B7B700D7F341 /* Result.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCC73FFA1AE6B74E00D7F341 /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
34 | DCC7400A1AE6B7B700D7F341 /* ValueTransformer.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCC73FFC1AE6B74E00D7F341 /* ValueTransformer.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
35 | DCC7400B1AE6B7B700D7F341 /* Monocle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCC73FF61AE6B74E00D7F341 /* Monocle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
36 | DCC7400C1AE6B7B700D7F341 /* Pistachio.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCC73FF81AE6B74E00D7F341 /* Pistachio.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
37 | DCC7400D1AE6B7B700D7F341 /* Runes.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCC73FFB1AE6B74E00D7F341 /* Runes.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
38 | DCC7400E1AE6B7B700D7F341 /* Argo.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCC73FF51AE6B74E00D7F341 /* Argo.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
39 | DCC7400F1AE6B7DE00D7F341 /* Pistachiargo.h in Headers */ = {isa = PBXBuildFile; fileRef = DCA5B9B81A8AC74800667D32 /* Pistachiargo.h */; settings = {ATTRIBUTES = (Public, ); }; };
40 | DCC740101AE6B7E300D7F341 /* JSONAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA5B9D11A8AC89700667D32 /* JSONAdapter.swift */; };
41 | DCC740111AE6B7E300D7F341 /* JSONValueTransformers.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA5B9D21A8AC89700667D32 /* JSONValueTransformers.swift */; };
42 | DCC740141AE6B7EA00D7F341 /* JSONAdapterSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA5B9D71A8AC93700667D32 /* JSONAdapterSpec.swift */; };
43 | DCC740151AE6B7EA00D7F341 /* JSONValueTransformersSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA5B9D81A8AC93700667D32 /* JSONValueTransformersSpec.swift */; };
44 | DCE2DDEC1AF1A9100075FF3B /* Box.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCE2DDE61AF1A8C90075FF3B /* Box.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
45 | DCE2DDED1AF1A92B0075FF3B /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCE2DDE91AF1A8F00075FF3B /* Result.framework */; };
46 | DCE2DDEE1AF1A92B0075FF3B /* ValueTransformer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCE2DDEB1AF1A8F00075FF3B /* ValueTransformer.framework */; };
47 | DCE2DDEF1AF1A93B0075FF3B /* Result.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCE2DDE91AF1A8F00075FF3B /* Result.framework */; };
48 | DCE2DDF01AF1A93B0075FF3B /* ValueTransformer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCE2DDEB1AF1A8F00075FF3B /* ValueTransformer.framework */; };
49 | DCE2DDF21AF1A9520075FF3B /* Quick.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCA5B9E41A8ACA4900667D32 /* Quick.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
50 | DCE2DDF31AF1A9520075FF3B /* Nimble.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCA5B9E31A8ACA4900667D32 /* Nimble.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
51 | DCE2DDF41AF1A9520075FF3B /* Box.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCE2DDE71AF1A8F00075FF3B /* Box.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
52 | DCE2DDF51AF1A9520075FF3B /* Result.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCE2DDE91AF1A8F00075FF3B /* Result.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
53 | DCE2DDF61AF1A9520075FF3B /* ValueTransformer.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCE2DDEB1AF1A8F00075FF3B /* ValueTransformer.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
54 | DCE2DDF71AF1A9520075FF3B /* Monocle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCE2DDE81AF1A8F00075FF3B /* Monocle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
55 | DCE2DDF81AF1A9520075FF3B /* Pistachio.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCA5B9DE1A8ACA2700667D32 /* Pistachio.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
56 | DCE2DDF91AF1A9520075FF3B /* Runes.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCE2DDEA1AF1A8F00075FF3B /* Runes.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
57 | DCE2DDFA1AF1A9520075FF3B /* Argo.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCA5B9DD1A8ACA2700667D32 /* Argo.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
58 | /* End PBXBuildFile section */
59 |
60 | /* Begin PBXContainerItemProxy section */
61 | DCA5B9C01A8AC74800667D32 /* PBXContainerItemProxy */ = {
62 | isa = PBXContainerItemProxy;
63 | containerPortal = DCA5B9AA1A8AC74800667D32 /* Project object */;
64 | proxyType = 1;
65 | remoteGlobalIDString = DCA5B9B21A8AC74800667D32;
66 | remoteInfo = Pistachiargo;
67 | };
68 | DCC73FE71AE6B67100D7F341 /* PBXContainerItemProxy */ = {
69 | isa = PBXContainerItemProxy;
70 | containerPortal = DCA5B9AA1A8AC74800667D32 /* Project object */;
71 | proxyType = 1;
72 | remoteGlobalIDString = DCC73FDA1AE6B67100D7F341;
73 | remoteInfo = "Pistachiargo-Mac";
74 | };
75 | /* End PBXContainerItemProxy section */
76 |
77 | /* Begin PBXCopyFilesBuildPhase section */
78 | DCC740061AE6B7B000D7F341 /* CopyFiles */ = {
79 | isa = PBXCopyFilesBuildPhase;
80 | buildActionMask = 2147483647;
81 | dstPath = "";
82 | dstSubfolderSpec = 10;
83 | files = (
84 | DCC740071AE6B7B600D7F341 /* Quick.framework in CopyFiles */,
85 | DCC740081AE6B7B600D7F341 /* Nimble.framework in CopyFiles */,
86 | DCE2DDEC1AF1A9100075FF3B /* Box.framework in CopyFiles */,
87 | DCC740091AE6B7B700D7F341 /* Result.framework in CopyFiles */,
88 | DCC7400A1AE6B7B700D7F341 /* ValueTransformer.framework in CopyFiles */,
89 | DCC7400B1AE6B7B700D7F341 /* Monocle.framework in CopyFiles */,
90 | DCC7400C1AE6B7B700D7F341 /* Pistachio.framework in CopyFiles */,
91 | DCC7400D1AE6B7B700D7F341 /* Runes.framework in CopyFiles */,
92 | DCC7400E1AE6B7B700D7F341 /* Argo.framework in CopyFiles */,
93 | );
94 | runOnlyForDeploymentPostprocessing = 0;
95 | };
96 | DCE2DDF11AF1A9420075FF3B /* CopyFiles */ = {
97 | isa = PBXCopyFilesBuildPhase;
98 | buildActionMask = 2147483647;
99 | dstPath = "";
100 | dstSubfolderSpec = 10;
101 | files = (
102 | DCE2DDF21AF1A9520075FF3B /* Quick.framework in CopyFiles */,
103 | DCE2DDF31AF1A9520075FF3B /* Nimble.framework in CopyFiles */,
104 | DCE2DDF41AF1A9520075FF3B /* Box.framework in CopyFiles */,
105 | DCE2DDF51AF1A9520075FF3B /* Result.framework in CopyFiles */,
106 | DCE2DDF61AF1A9520075FF3B /* ValueTransformer.framework in CopyFiles */,
107 | DCE2DDF71AF1A9520075FF3B /* Monocle.framework in CopyFiles */,
108 | DCE2DDF81AF1A9520075FF3B /* Pistachio.framework in CopyFiles */,
109 | DCE2DDF91AF1A9520075FF3B /* Runes.framework in CopyFiles */,
110 | DCE2DDFA1AF1A9520075FF3B /* Argo.framework in CopyFiles */,
111 | );
112 | runOnlyForDeploymentPostprocessing = 0;
113 | };
114 | /* End PBXCopyFilesBuildPhase section */
115 |
116 | /* Begin PBXFileReference section */
117 | DC2980111AE70855005AA6D6 /* Node.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Node.swift; sourceTree = ""; };
118 | DCA5B9B31A8AC74800667D32 /* Pistachiargo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pistachiargo.framework; sourceTree = BUILT_PRODUCTS_DIR; };
119 | DCA5B9B71A8AC74800667D32 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
120 | DCA5B9B81A8AC74800667D32 /* Pistachiargo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Pistachiargo.h; sourceTree = ""; };
121 | DCA5B9BE1A8AC74800667D32 /* PistachiargoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PistachiargoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
122 | DCA5B9C41A8AC74800667D32 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
123 | DCA5B9D11A8AC89700667D32 /* JSONAdapter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONAdapter.swift; sourceTree = ""; };
124 | DCA5B9D21A8AC89700667D32 /* JSONValueTransformers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONValueTransformers.swift; sourceTree = ""; };
125 | DCA5B9D71A8AC93700667D32 /* JSONAdapterSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONAdapterSpec.swift; sourceTree = ""; };
126 | DCA5B9D81A8AC93700667D32 /* JSONValueTransformersSpec.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONValueTransformersSpec.swift; sourceTree = ""; };
127 | DCA5B9DD1A8ACA2700667D32 /* Argo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Argo.framework; path = Carthage/Build/iOS/Argo.framework; sourceTree = ""; };
128 | DCA5B9DE1A8ACA2700667D32 /* Pistachio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Pistachio.framework; path = Carthage/Build/iOS/Pistachio.framework; sourceTree = ""; };
129 | DCA5B9E31A8ACA4900667D32 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = Carthage/Build/iOS/Nimble.framework; sourceTree = ""; };
130 | DCA5B9E41A8ACA4900667D32 /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quick.framework; path = Carthage/Build/iOS/Quick.framework; sourceTree = ""; };
131 | DCC73FDB1AE6B67100D7F341 /* Pistachiargo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pistachiargo.framework; sourceTree = BUILT_PRODUCTS_DIR; };
132 | DCC73FE51AE6B67100D7F341 /* PistachiargoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PistachiargoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
133 | DCC73FF51AE6B74E00D7F341 /* Argo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Argo.framework; path = Carthage/Build/Mac/Argo.framework; sourceTree = ""; };
134 | DCC73FF61AE6B74E00D7F341 /* Monocle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Monocle.framework; path = Carthage/Build/Mac/Monocle.framework; sourceTree = ""; };
135 | DCC73FF71AE6B74E00D7F341 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = Carthage/Build/Mac/Nimble.framework; sourceTree = ""; };
136 | DCC73FF81AE6B74E00D7F341 /* Pistachio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Pistachio.framework; path = Carthage/Build/Mac/Pistachio.framework; sourceTree = ""; };
137 | DCC73FF91AE6B74E00D7F341 /* Quick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quick.framework; path = Carthage/Build/Mac/Quick.framework; sourceTree = ""; };
138 | DCC73FFA1AE6B74E00D7F341 /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Result.framework; path = Carthage/Build/Mac/Result.framework; sourceTree = ""; };
139 | DCC73FFB1AE6B74E00D7F341 /* Runes.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Runes.framework; path = Carthage/Build/Mac/Runes.framework; sourceTree = ""; };
140 | DCC73FFC1AE6B74E00D7F341 /* ValueTransformer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ValueTransformer.framework; path = Carthage/Build/Mac/ValueTransformer.framework; sourceTree = ""; };
141 | DCE2DDE61AF1A8C90075FF3B /* Box.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Box.framework; path = Carthage/Build/Mac/Box.framework; sourceTree = ""; };
142 | DCE2DDE71AF1A8F00075FF3B /* Box.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Box.framework; path = Carthage/Build/iOS/Box.framework; sourceTree = ""; };
143 | DCE2DDE81AF1A8F00075FF3B /* Monocle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Monocle.framework; path = Carthage/Build/iOS/Monocle.framework; sourceTree = ""; };
144 | DCE2DDE91AF1A8F00075FF3B /* Result.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Result.framework; path = Carthage/Build/iOS/Result.framework; sourceTree = ""; };
145 | DCE2DDEA1AF1A8F00075FF3B /* Runes.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Runes.framework; path = Carthage/Build/iOS/Runes.framework; sourceTree = ""; };
146 | DCE2DDEB1AF1A8F00075FF3B /* ValueTransformer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ValueTransformer.framework; path = Carthage/Build/iOS/ValueTransformer.framework; sourceTree = ""; };
147 | /* End PBXFileReference section */
148 |
149 | /* Begin PBXFrameworksBuildPhase section */
150 | DCA5B9AF1A8AC74800667D32 /* Frameworks */ = {
151 | isa = PBXFrameworksBuildPhase;
152 | buildActionMask = 2147483647;
153 | files = (
154 | DCE2DDED1AF1A92B0075FF3B /* Result.framework in Frameworks */,
155 | DCE2DDEE1AF1A92B0075FF3B /* ValueTransformer.framework in Frameworks */,
156 | DCA5B9E01A8ACA2700667D32 /* Pistachio.framework in Frameworks */,
157 | DCA5B9DF1A8ACA2700667D32 /* Argo.framework in Frameworks */,
158 | );
159 | runOnlyForDeploymentPostprocessing = 0;
160 | };
161 | DCA5B9BB1A8AC74800667D32 /* Frameworks */ = {
162 | isa = PBXFrameworksBuildPhase;
163 | buildActionMask = 2147483647;
164 | files = (
165 | DCA5B9E61A8ACA4900667D32 /* Quick.framework in Frameworks */,
166 | DCA5B9E51A8ACA4900667D32 /* Nimble.framework in Frameworks */,
167 | DCE2DDEF1AF1A93B0075FF3B /* Result.framework in Frameworks */,
168 | DCE2DDF01AF1A93B0075FF3B /* ValueTransformer.framework in Frameworks */,
169 | DCA5B9BF1A8AC74800667D32 /* Pistachiargo.framework in Frameworks */,
170 | );
171 | runOnlyForDeploymentPostprocessing = 0;
172 | };
173 | DCC73FD71AE6B67100D7F341 /* Frameworks */ = {
174 | isa = PBXFrameworksBuildPhase;
175 | buildActionMask = 2147483647;
176 | files = (
177 | DCC73FFE1AE6B79E00D7F341 /* Result.framework in Frameworks */,
178 | DCC73FFF1AE6B79E00D7F341 /* ValueTransformer.framework in Frameworks */,
179 | DCC740001AE6B79E00D7F341 /* Pistachio.framework in Frameworks */,
180 | DCC740011AE6B79E00D7F341 /* Argo.framework in Frameworks */,
181 | );
182 | runOnlyForDeploymentPostprocessing = 0;
183 | };
184 | DCC73FE21AE6B67100D7F341 /* Frameworks */ = {
185 | isa = PBXFrameworksBuildPhase;
186 | buildActionMask = 2147483647;
187 | files = (
188 | DCC740021AE6B7AA00D7F341 /* Result.framework in Frameworks */,
189 | DCC740031AE6B7AA00D7F341 /* ValueTransformer.framework in Frameworks */,
190 | DCC740041AE6B7AA00D7F341 /* Pistachio.framework in Frameworks */,
191 | DCC740051AE6B7AA00D7F341 /* Argo.framework in Frameworks */,
192 | DCC73FE61AE6B67100D7F341 /* Pistachiargo.framework in Frameworks */,
193 | );
194 | runOnlyForDeploymentPostprocessing = 0;
195 | };
196 | /* End PBXFrameworksBuildPhase section */
197 |
198 | /* Begin PBXGroup section */
199 | DC2980101AE70855005AA6D6 /* Fixtures */ = {
200 | isa = PBXGroup;
201 | children = (
202 | DC2980111AE70855005AA6D6 /* Node.swift */,
203 | );
204 | path = Fixtures;
205 | sourceTree = "";
206 | };
207 | DCA5B9A91A8AC74800667D32 = {
208 | isa = PBXGroup;
209 | children = (
210 | DCA5B9B51A8AC74800667D32 /* Pistachiargo */,
211 | DCA5B9C21A8AC74800667D32 /* PistachiargoTests */,
212 | DCDA378F1A9402DA00C55699 /* Frameworks */,
213 | DCA5B9B41A8AC74800667D32 /* Products */,
214 | );
215 | sourceTree = "";
216 | };
217 | DCA5B9B41A8AC74800667D32 /* Products */ = {
218 | isa = PBXGroup;
219 | children = (
220 | DCA5B9B31A8AC74800667D32 /* Pistachiargo.framework */,
221 | DCA5B9BE1A8AC74800667D32 /* PistachiargoTests.xctest */,
222 | DCC73FDB1AE6B67100D7F341 /* Pistachiargo.framework */,
223 | DCC73FE51AE6B67100D7F341 /* PistachiargoTests.xctest */,
224 | );
225 | name = Products;
226 | sourceTree = "";
227 | };
228 | DCA5B9B51A8AC74800667D32 /* Pistachiargo */ = {
229 | isa = PBXGroup;
230 | children = (
231 | DCA5B9B81A8AC74800667D32 /* Pistachiargo.h */,
232 | DCA5B9D11A8AC89700667D32 /* JSONAdapter.swift */,
233 | DCA5B9D21A8AC89700667D32 /* JSONValueTransformers.swift */,
234 | DCA5B9B61A8AC74800667D32 /* Supporting Files */,
235 | );
236 | path = Pistachiargo;
237 | sourceTree = "";
238 | };
239 | DCA5B9B61A8AC74800667D32 /* Supporting Files */ = {
240 | isa = PBXGroup;
241 | children = (
242 | DCA5B9B71A8AC74800667D32 /* Info.plist */,
243 | );
244 | name = "Supporting Files";
245 | sourceTree = "";
246 | };
247 | DCA5B9C21A8AC74800667D32 /* PistachiargoTests */ = {
248 | isa = PBXGroup;
249 | children = (
250 | DCA5B9D71A8AC93700667D32 /* JSONAdapterSpec.swift */,
251 | DCA5B9D81A8AC93700667D32 /* JSONValueTransformersSpec.swift */,
252 | DC2980101AE70855005AA6D6 /* Fixtures */,
253 | DCA5B9C31A8AC74800667D32 /* Supporting Files */,
254 | );
255 | path = PistachiargoTests;
256 | sourceTree = "";
257 | };
258 | DCA5B9C31A8AC74800667D32 /* Supporting Files */ = {
259 | isa = PBXGroup;
260 | children = (
261 | DCA5B9C41A8AC74800667D32 /* Info.plist */,
262 | );
263 | name = "Supporting Files";
264 | sourceTree = "";
265 | };
266 | DCC73FF41AE6B70C00D7F341 /* iOS */ = {
267 | isa = PBXGroup;
268 | children = (
269 | DCA5B9E41A8ACA4900667D32 /* Quick.framework */,
270 | DCA5B9E31A8ACA4900667D32 /* Nimble.framework */,
271 | DCE2DDE71AF1A8F00075FF3B /* Box.framework */,
272 | DCE2DDE91AF1A8F00075FF3B /* Result.framework */,
273 | DCE2DDEB1AF1A8F00075FF3B /* ValueTransformer.framework */,
274 | DCE2DDE81AF1A8F00075FF3B /* Monocle.framework */,
275 | DCA5B9DE1A8ACA2700667D32 /* Pistachio.framework */,
276 | DCE2DDEA1AF1A8F00075FF3B /* Runes.framework */,
277 | DCA5B9DD1A8ACA2700667D32 /* Argo.framework */,
278 | );
279 | name = iOS;
280 | sourceTree = "";
281 | };
282 | DCC73FFD1AE6B75200D7F341 /* Mac */ = {
283 | isa = PBXGroup;
284 | children = (
285 | DCC73FF91AE6B74E00D7F341 /* Quick.framework */,
286 | DCC73FF71AE6B74E00D7F341 /* Nimble.framework */,
287 | DCE2DDE61AF1A8C90075FF3B /* Box.framework */,
288 | DCC73FFA1AE6B74E00D7F341 /* Result.framework */,
289 | DCC73FFC1AE6B74E00D7F341 /* ValueTransformer.framework */,
290 | DCC73FF61AE6B74E00D7F341 /* Monocle.framework */,
291 | DCC73FF81AE6B74E00D7F341 /* Pistachio.framework */,
292 | DCC73FFB1AE6B74E00D7F341 /* Runes.framework */,
293 | DCC73FF51AE6B74E00D7F341 /* Argo.framework */,
294 | );
295 | name = Mac;
296 | sourceTree = "";
297 | };
298 | DCDA378F1A9402DA00C55699 /* Frameworks */ = {
299 | isa = PBXGroup;
300 | children = (
301 | DCC73FF41AE6B70C00D7F341 /* iOS */,
302 | DCC73FFD1AE6B75200D7F341 /* Mac */,
303 | );
304 | name = Frameworks;
305 | sourceTree = "";
306 | };
307 | /* End PBXGroup section */
308 |
309 | /* Begin PBXHeadersBuildPhase section */
310 | DCA5B9B01A8AC74800667D32 /* Headers */ = {
311 | isa = PBXHeadersBuildPhase;
312 | buildActionMask = 2147483647;
313 | files = (
314 | DCA5B9B91A8AC74800667D32 /* Pistachiargo.h in Headers */,
315 | );
316 | runOnlyForDeploymentPostprocessing = 0;
317 | };
318 | DCC73FD81AE6B67100D7F341 /* Headers */ = {
319 | isa = PBXHeadersBuildPhase;
320 | buildActionMask = 2147483647;
321 | files = (
322 | DCC7400F1AE6B7DE00D7F341 /* Pistachiargo.h in Headers */,
323 | );
324 | runOnlyForDeploymentPostprocessing = 0;
325 | };
326 | /* End PBXHeadersBuildPhase section */
327 |
328 | /* Begin PBXNativeTarget section */
329 | DCA5B9B21A8AC74800667D32 /* Pistachiargo-iOS */ = {
330 | isa = PBXNativeTarget;
331 | buildConfigurationList = DCA5B9C91A8AC74800667D32 /* Build configuration list for PBXNativeTarget "Pistachiargo-iOS" */;
332 | buildPhases = (
333 | DCA5B9AE1A8AC74800667D32 /* Sources */,
334 | DCA5B9AF1A8AC74800667D32 /* Frameworks */,
335 | DCA5B9B01A8AC74800667D32 /* Headers */,
336 | DCA5B9B11A8AC74800667D32 /* Resources */,
337 | );
338 | buildRules = (
339 | );
340 | dependencies = (
341 | );
342 | name = "Pistachiargo-iOS";
343 | productName = Pistachiargo;
344 | productReference = DCA5B9B31A8AC74800667D32 /* Pistachiargo.framework */;
345 | productType = "com.apple.product-type.framework";
346 | };
347 | DCA5B9BD1A8AC74800667D32 /* Pistachiargo-iOSTests */ = {
348 | isa = PBXNativeTarget;
349 | buildConfigurationList = DCA5B9CC1A8AC74800667D32 /* Build configuration list for PBXNativeTarget "Pistachiargo-iOSTests" */;
350 | buildPhases = (
351 | DCA5B9BA1A8AC74800667D32 /* Sources */,
352 | DCA5B9BB1A8AC74800667D32 /* Frameworks */,
353 | DCA5B9BC1A8AC74800667D32 /* Resources */,
354 | DCE2DDF11AF1A9420075FF3B /* CopyFiles */,
355 | );
356 | buildRules = (
357 | );
358 | dependencies = (
359 | DCA5B9C11A8AC74800667D32 /* PBXTargetDependency */,
360 | );
361 | name = "Pistachiargo-iOSTests";
362 | productName = PistachiargoTests;
363 | productReference = DCA5B9BE1A8AC74800667D32 /* PistachiargoTests.xctest */;
364 | productType = "com.apple.product-type.bundle.unit-test";
365 | };
366 | DCC73FDA1AE6B67100D7F341 /* Pistachiargo-Mac */ = {
367 | isa = PBXNativeTarget;
368 | buildConfigurationList = DCC73FEE1AE6B67100D7F341 /* Build configuration list for PBXNativeTarget "Pistachiargo-Mac" */;
369 | buildPhases = (
370 | DCC73FD61AE6B67100D7F341 /* Sources */,
371 | DCC73FD71AE6B67100D7F341 /* Frameworks */,
372 | DCC73FD81AE6B67100D7F341 /* Headers */,
373 | DCC73FD91AE6B67100D7F341 /* Resources */,
374 | );
375 | buildRules = (
376 | );
377 | dependencies = (
378 | );
379 | name = "Pistachiargo-Mac";
380 | productName = "Pistachiargo-Mac";
381 | productReference = DCC73FDB1AE6B67100D7F341 /* Pistachiargo.framework */;
382 | productType = "com.apple.product-type.framework";
383 | };
384 | DCC73FE41AE6B67100D7F341 /* Pistachiargo-MacTests */ = {
385 | isa = PBXNativeTarget;
386 | buildConfigurationList = DCC73FF11AE6B67100D7F341 /* Build configuration list for PBXNativeTarget "Pistachiargo-MacTests" */;
387 | buildPhases = (
388 | DCC73FE11AE6B67100D7F341 /* Sources */,
389 | DCC73FE21AE6B67100D7F341 /* Frameworks */,
390 | DCC73FE31AE6B67100D7F341 /* Resources */,
391 | DCC740061AE6B7B000D7F341 /* CopyFiles */,
392 | );
393 | buildRules = (
394 | );
395 | dependencies = (
396 | DCC73FE81AE6B67100D7F341 /* PBXTargetDependency */,
397 | );
398 | name = "Pistachiargo-MacTests";
399 | productName = "Pistachiargo-MacTests";
400 | productReference = DCC73FE51AE6B67100D7F341 /* PistachiargoTests.xctest */;
401 | productType = "com.apple.product-type.bundle.unit-test";
402 | };
403 | /* End PBXNativeTarget section */
404 |
405 | /* Begin PBXProject section */
406 | DCA5B9AA1A8AC74800667D32 /* Project object */ = {
407 | isa = PBXProject;
408 | attributes = {
409 | LastUpgradeCheck = 0610;
410 | ORGANIZATIONNAME = "Felix Jendrusch";
411 | TargetAttributes = {
412 | DCA5B9B21A8AC74800667D32 = {
413 | CreatedOnToolsVersion = 6.1.1;
414 | };
415 | DCA5B9BD1A8AC74800667D32 = {
416 | CreatedOnToolsVersion = 6.1.1;
417 | };
418 | DCC73FDA1AE6B67100D7F341 = {
419 | CreatedOnToolsVersion = 6.3;
420 | };
421 | DCC73FE41AE6B67100D7F341 = {
422 | CreatedOnToolsVersion = 6.3;
423 | };
424 | };
425 | };
426 | buildConfigurationList = DCA5B9AD1A8AC74800667D32 /* Build configuration list for PBXProject "Pistachiargo" */;
427 | compatibilityVersion = "Xcode 3.2";
428 | developmentRegion = English;
429 | hasScannedForEncodings = 0;
430 | knownRegions = (
431 | en,
432 | );
433 | mainGroup = DCA5B9A91A8AC74800667D32;
434 | productRefGroup = DCA5B9B41A8AC74800667D32 /* Products */;
435 | projectDirPath = "";
436 | projectRoot = "";
437 | targets = (
438 | DCA5B9B21A8AC74800667D32 /* Pistachiargo-iOS */,
439 | DCA5B9BD1A8AC74800667D32 /* Pistachiargo-iOSTests */,
440 | DCC73FDA1AE6B67100D7F341 /* Pistachiargo-Mac */,
441 | DCC73FE41AE6B67100D7F341 /* Pistachiargo-MacTests */,
442 | );
443 | };
444 | /* End PBXProject section */
445 |
446 | /* Begin PBXResourcesBuildPhase section */
447 | DCA5B9B11A8AC74800667D32 /* Resources */ = {
448 | isa = PBXResourcesBuildPhase;
449 | buildActionMask = 2147483647;
450 | files = (
451 | );
452 | runOnlyForDeploymentPostprocessing = 0;
453 | };
454 | DCA5B9BC1A8AC74800667D32 /* Resources */ = {
455 | isa = PBXResourcesBuildPhase;
456 | buildActionMask = 2147483647;
457 | files = (
458 | );
459 | runOnlyForDeploymentPostprocessing = 0;
460 | };
461 | DCC73FD91AE6B67100D7F341 /* Resources */ = {
462 | isa = PBXResourcesBuildPhase;
463 | buildActionMask = 2147483647;
464 | files = (
465 | );
466 | runOnlyForDeploymentPostprocessing = 0;
467 | };
468 | DCC73FE31AE6B67100D7F341 /* Resources */ = {
469 | isa = PBXResourcesBuildPhase;
470 | buildActionMask = 2147483647;
471 | files = (
472 | );
473 | runOnlyForDeploymentPostprocessing = 0;
474 | };
475 | /* End PBXResourcesBuildPhase section */
476 |
477 | /* Begin PBXSourcesBuildPhase section */
478 | DCA5B9AE1A8AC74800667D32 /* Sources */ = {
479 | isa = PBXSourcesBuildPhase;
480 | buildActionMask = 2147483647;
481 | files = (
482 | DCA5B9D41A8AC89700667D32 /* JSONAdapter.swift in Sources */,
483 | DCA5B9D51A8AC89700667D32 /* JSONValueTransformers.swift in Sources */,
484 | );
485 | runOnlyForDeploymentPostprocessing = 0;
486 | };
487 | DCA5B9BA1A8AC74800667D32 /* Sources */ = {
488 | isa = PBXSourcesBuildPhase;
489 | buildActionMask = 2147483647;
490 | files = (
491 | DC2980121AE70855005AA6D6 /* Node.swift in Sources */,
492 | DCA5B9DB1A8AC93700667D32 /* JSONValueTransformersSpec.swift in Sources */,
493 | DCA5B9DA1A8AC93700667D32 /* JSONAdapterSpec.swift in Sources */,
494 | );
495 | runOnlyForDeploymentPostprocessing = 0;
496 | };
497 | DCC73FD61AE6B67100D7F341 /* Sources */ = {
498 | isa = PBXSourcesBuildPhase;
499 | buildActionMask = 2147483647;
500 | files = (
501 | DCC740101AE6B7E300D7F341 /* JSONAdapter.swift in Sources */,
502 | DCC740111AE6B7E300D7F341 /* JSONValueTransformers.swift in Sources */,
503 | );
504 | runOnlyForDeploymentPostprocessing = 0;
505 | };
506 | DCC73FE11AE6B67100D7F341 /* Sources */ = {
507 | isa = PBXSourcesBuildPhase;
508 | buildActionMask = 2147483647;
509 | files = (
510 | DC2980131AE70855005AA6D6 /* Node.swift in Sources */,
511 | DCC740151AE6B7EA00D7F341 /* JSONValueTransformersSpec.swift in Sources */,
512 | DCC740141AE6B7EA00D7F341 /* JSONAdapterSpec.swift in Sources */,
513 | );
514 | runOnlyForDeploymentPostprocessing = 0;
515 | };
516 | /* End PBXSourcesBuildPhase section */
517 |
518 | /* Begin PBXTargetDependency section */
519 | DCA5B9C11A8AC74800667D32 /* PBXTargetDependency */ = {
520 | isa = PBXTargetDependency;
521 | target = DCA5B9B21A8AC74800667D32 /* Pistachiargo-iOS */;
522 | targetProxy = DCA5B9C01A8AC74800667D32 /* PBXContainerItemProxy */;
523 | };
524 | DCC73FE81AE6B67100D7F341 /* PBXTargetDependency */ = {
525 | isa = PBXTargetDependency;
526 | target = DCC73FDA1AE6B67100D7F341 /* Pistachiargo-Mac */;
527 | targetProxy = DCC73FE71AE6B67100D7F341 /* PBXContainerItemProxy */;
528 | };
529 | /* End PBXTargetDependency section */
530 |
531 | /* Begin XCBuildConfiguration section */
532 | DCA5B9C71A8AC74800667D32 /* Debug */ = {
533 | isa = XCBuildConfiguration;
534 | buildSettings = {
535 | ALWAYS_SEARCH_USER_PATHS = NO;
536 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
537 | CLANG_CXX_LIBRARY = "libc++";
538 | CLANG_ENABLE_MODULES = YES;
539 | CLANG_ENABLE_OBJC_ARC = YES;
540 | CLANG_WARN_BOOL_CONVERSION = YES;
541 | CLANG_WARN_CONSTANT_CONVERSION = YES;
542 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
543 | CLANG_WARN_EMPTY_BODY = YES;
544 | CLANG_WARN_ENUM_CONVERSION = YES;
545 | CLANG_WARN_INT_CONVERSION = YES;
546 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
547 | CLANG_WARN_UNREACHABLE_CODE = YES;
548 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
549 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
550 | COPY_PHASE_STRIP = NO;
551 | CURRENT_PROJECT_VERSION = 1;
552 | ENABLE_STRICT_OBJC_MSGSEND = YES;
553 | GCC_C_LANGUAGE_STANDARD = gnu99;
554 | GCC_DYNAMIC_NO_PIC = NO;
555 | GCC_OPTIMIZATION_LEVEL = 0;
556 | GCC_PREPROCESSOR_DEFINITIONS = (
557 | "DEBUG=1",
558 | "$(inherited)",
559 | );
560 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
561 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
562 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
563 | GCC_WARN_UNDECLARED_SELECTOR = YES;
564 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
565 | GCC_WARN_UNUSED_FUNCTION = YES;
566 | GCC_WARN_UNUSED_VARIABLE = YES;
567 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
568 | MACOSX_DEPLOYMENT_TARGET = 10.9;
569 | MTL_ENABLE_DEBUG_INFO = YES;
570 | ONLY_ACTIVE_ARCH = YES;
571 | PRODUCT_NAME = "$(PROJECT_NAME)";
572 | SDKROOT = iphoneos;
573 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
574 | TARGETED_DEVICE_FAMILY = "1,2";
575 | VERSIONING_SYSTEM = "apple-generic";
576 | VERSION_INFO_PREFIX = "";
577 | };
578 | name = Debug;
579 | };
580 | DCA5B9C81A8AC74800667D32 /* Release */ = {
581 | isa = XCBuildConfiguration;
582 | buildSettings = {
583 | ALWAYS_SEARCH_USER_PATHS = NO;
584 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
585 | CLANG_CXX_LIBRARY = "libc++";
586 | CLANG_ENABLE_MODULES = YES;
587 | CLANG_ENABLE_OBJC_ARC = YES;
588 | CLANG_WARN_BOOL_CONVERSION = YES;
589 | CLANG_WARN_CONSTANT_CONVERSION = YES;
590 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
591 | CLANG_WARN_EMPTY_BODY = YES;
592 | CLANG_WARN_ENUM_CONVERSION = YES;
593 | CLANG_WARN_INT_CONVERSION = YES;
594 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
595 | CLANG_WARN_UNREACHABLE_CODE = YES;
596 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
597 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
598 | COPY_PHASE_STRIP = YES;
599 | CURRENT_PROJECT_VERSION = 1;
600 | ENABLE_NS_ASSERTIONS = NO;
601 | ENABLE_STRICT_OBJC_MSGSEND = YES;
602 | GCC_C_LANGUAGE_STANDARD = gnu99;
603 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
604 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
605 | GCC_WARN_UNDECLARED_SELECTOR = YES;
606 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
607 | GCC_WARN_UNUSED_FUNCTION = YES;
608 | GCC_WARN_UNUSED_VARIABLE = YES;
609 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
610 | MACOSX_DEPLOYMENT_TARGET = 10.9;
611 | MTL_ENABLE_DEBUG_INFO = NO;
612 | PRODUCT_NAME = "$(PROJECT_NAME)";
613 | SDKROOT = iphoneos;
614 | TARGETED_DEVICE_FAMILY = "1,2";
615 | VALIDATE_PRODUCT = YES;
616 | VERSIONING_SYSTEM = "apple-generic";
617 | VERSION_INFO_PREFIX = "";
618 | };
619 | name = Release;
620 | };
621 | DCA5B9CA1A8AC74800667D32 /* Debug */ = {
622 | isa = XCBuildConfiguration;
623 | buildSettings = {
624 | CLANG_ENABLE_MODULES = YES;
625 | DEFINES_MODULE = YES;
626 | DYLIB_COMPATIBILITY_VERSION = 1;
627 | DYLIB_CURRENT_VERSION = 1;
628 | DYLIB_INSTALL_NAME_BASE = "@rpath";
629 | FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/Carthage/Build/iOS";
630 | INFOPLIST_FILE = Pistachiargo/Info.plist;
631 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
632 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
633 | PRODUCT_NAME = "$(inherited)";
634 | SKIP_INSTALL = YES;
635 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
636 | };
637 | name = Debug;
638 | };
639 | DCA5B9CB1A8AC74800667D32 /* Release */ = {
640 | isa = XCBuildConfiguration;
641 | buildSettings = {
642 | CLANG_ENABLE_MODULES = YES;
643 | DEFINES_MODULE = YES;
644 | DYLIB_COMPATIBILITY_VERSION = 1;
645 | DYLIB_CURRENT_VERSION = 1;
646 | DYLIB_INSTALL_NAME_BASE = "@rpath";
647 | FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/Carthage/Build/iOS";
648 | INFOPLIST_FILE = Pistachiargo/Info.plist;
649 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
650 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
651 | PRODUCT_NAME = "$(inherited)";
652 | SKIP_INSTALL = YES;
653 | };
654 | name = Release;
655 | };
656 | DCA5B9CD1A8AC74800667D32 /* Debug */ = {
657 | isa = XCBuildConfiguration;
658 | buildSettings = {
659 | CLANG_ENABLE_MODULES = YES;
660 | FRAMEWORK_SEARCH_PATHS = (
661 | "$(SDKROOT)/Developer/Library/Frameworks",
662 | "$(inherited)",
663 | "$(PROJECT_DIR)/Carthage/Build/iOS",
664 | );
665 | GCC_PREPROCESSOR_DEFINITIONS = (
666 | "DEBUG=1",
667 | "$(inherited)",
668 | );
669 | INFOPLIST_FILE = PistachiargoTests/Info.plist;
670 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
671 | PRODUCT_NAME = "$(inherited)Tests";
672 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
673 | };
674 | name = Debug;
675 | };
676 | DCA5B9CE1A8AC74800667D32 /* Release */ = {
677 | isa = XCBuildConfiguration;
678 | buildSettings = {
679 | CLANG_ENABLE_MODULES = YES;
680 | FRAMEWORK_SEARCH_PATHS = (
681 | "$(SDKROOT)/Developer/Library/Frameworks",
682 | "$(inherited)",
683 | "$(PROJECT_DIR)/Carthage/Build/iOS",
684 | );
685 | INFOPLIST_FILE = PistachiargoTests/Info.plist;
686 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
687 | PRODUCT_NAME = "$(inherited)Tests";
688 | };
689 | name = Release;
690 | };
691 | DCC73FEF1AE6B67100D7F341 /* Debug */ = {
692 | isa = XCBuildConfiguration;
693 | buildSettings = {
694 | COMBINE_HIDPI_IMAGES = YES;
695 | DEBUG_INFORMATION_FORMAT = dwarf;
696 | DEFINES_MODULE = YES;
697 | DYLIB_COMPATIBILITY_VERSION = 1;
698 | DYLIB_CURRENT_VERSION = 1;
699 | DYLIB_INSTALL_NAME_BASE = "@rpath";
700 | FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/Carthage/Build/Mac";
701 | FRAMEWORK_VERSION = A;
702 | GCC_NO_COMMON_BLOCKS = YES;
703 | GCC_PREPROCESSOR_DEFINITIONS = (
704 | "DEBUG=1",
705 | "$(inherited)",
706 | );
707 | INFOPLIST_FILE = Pistachiargo/Info.plist;
708 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
709 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
710 | PRODUCT_NAME = "$(inherited)";
711 | SDKROOT = macosx;
712 | SKIP_INSTALL = YES;
713 | };
714 | name = Debug;
715 | };
716 | DCC73FF01AE6B67100D7F341 /* Release */ = {
717 | isa = XCBuildConfiguration;
718 | buildSettings = {
719 | COMBINE_HIDPI_IMAGES = YES;
720 | COPY_PHASE_STRIP = NO;
721 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
722 | DEFINES_MODULE = YES;
723 | DYLIB_COMPATIBILITY_VERSION = 1;
724 | DYLIB_CURRENT_VERSION = 1;
725 | DYLIB_INSTALL_NAME_BASE = "@rpath";
726 | FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/Carthage/Build/Mac";
727 | FRAMEWORK_VERSION = A;
728 | GCC_NO_COMMON_BLOCKS = YES;
729 | INFOPLIST_FILE = Pistachiargo/Info.plist;
730 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
731 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
732 | PRODUCT_NAME = "$(inherited)";
733 | SDKROOT = macosx;
734 | SKIP_INSTALL = YES;
735 | };
736 | name = Release;
737 | };
738 | DCC73FF21AE6B67100D7F341 /* Debug */ = {
739 | isa = XCBuildConfiguration;
740 | buildSettings = {
741 | COMBINE_HIDPI_IMAGES = YES;
742 | DEBUG_INFORMATION_FORMAT = dwarf;
743 | FRAMEWORK_SEARCH_PATHS = (
744 | "$(DEVELOPER_FRAMEWORKS_DIR)",
745 | "$(inherited)",
746 | "$(PROJECT_DIR)/Carthage/Build/Mac",
747 | );
748 | GCC_NO_COMMON_BLOCKS = YES;
749 | GCC_PREPROCESSOR_DEFINITIONS = (
750 | "DEBUG=1",
751 | "$(inherited)",
752 | );
753 | INFOPLIST_FILE = PistachiargoTests/Info.plist;
754 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
755 | PRODUCT_NAME = "$(inherited)Tests";
756 | SDKROOT = macosx;
757 | };
758 | name = Debug;
759 | };
760 | DCC73FF31AE6B67100D7F341 /* Release */ = {
761 | isa = XCBuildConfiguration;
762 | buildSettings = {
763 | COMBINE_HIDPI_IMAGES = YES;
764 | COPY_PHASE_STRIP = NO;
765 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
766 | FRAMEWORK_SEARCH_PATHS = (
767 | "$(DEVELOPER_FRAMEWORKS_DIR)",
768 | "$(inherited)",
769 | "$(PROJECT_DIR)/Carthage/Build/Mac",
770 | );
771 | GCC_NO_COMMON_BLOCKS = YES;
772 | INFOPLIST_FILE = PistachiargoTests/Info.plist;
773 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
774 | PRODUCT_NAME = "$(inherited)Tests";
775 | SDKROOT = macosx;
776 | };
777 | name = Release;
778 | };
779 | /* End XCBuildConfiguration section */
780 |
781 | /* Begin XCConfigurationList section */
782 | DCA5B9AD1A8AC74800667D32 /* Build configuration list for PBXProject "Pistachiargo" */ = {
783 | isa = XCConfigurationList;
784 | buildConfigurations = (
785 | DCA5B9C71A8AC74800667D32 /* Debug */,
786 | DCA5B9C81A8AC74800667D32 /* Release */,
787 | );
788 | defaultConfigurationIsVisible = 0;
789 | defaultConfigurationName = Release;
790 | };
791 | DCA5B9C91A8AC74800667D32 /* Build configuration list for PBXNativeTarget "Pistachiargo-iOS" */ = {
792 | isa = XCConfigurationList;
793 | buildConfigurations = (
794 | DCA5B9CA1A8AC74800667D32 /* Debug */,
795 | DCA5B9CB1A8AC74800667D32 /* Release */,
796 | );
797 | defaultConfigurationIsVisible = 0;
798 | defaultConfigurationName = Release;
799 | };
800 | DCA5B9CC1A8AC74800667D32 /* Build configuration list for PBXNativeTarget "Pistachiargo-iOSTests" */ = {
801 | isa = XCConfigurationList;
802 | buildConfigurations = (
803 | DCA5B9CD1A8AC74800667D32 /* Debug */,
804 | DCA5B9CE1A8AC74800667D32 /* Release */,
805 | );
806 | defaultConfigurationIsVisible = 0;
807 | defaultConfigurationName = Release;
808 | };
809 | DCC73FEE1AE6B67100D7F341 /* Build configuration list for PBXNativeTarget "Pistachiargo-Mac" */ = {
810 | isa = XCConfigurationList;
811 | buildConfigurations = (
812 | DCC73FEF1AE6B67100D7F341 /* Debug */,
813 | DCC73FF01AE6B67100D7F341 /* Release */,
814 | );
815 | defaultConfigurationIsVisible = 0;
816 | defaultConfigurationName = Release;
817 | };
818 | DCC73FF11AE6B67100D7F341 /* Build configuration list for PBXNativeTarget "Pistachiargo-MacTests" */ = {
819 | isa = XCConfigurationList;
820 | buildConfigurations = (
821 | DCC73FF21AE6B67100D7F341 /* Debug */,
822 | DCC73FF31AE6B67100D7F341 /* Release */,
823 | );
824 | defaultConfigurationIsVisible = 0;
825 | defaultConfigurationName = Release;
826 | };
827 | /* End XCConfigurationList section */
828 | };
829 | rootObject = DCA5B9AA1A8AC74800667D32 /* Project object */;
830 | }
831 |
--------------------------------------------------------------------------------