master 6021c6035e83 cached
71 files
466.6 KB
136.7k tokens
1 requests
Download .txt
Showing preview only (491K chars total). Download the full file or copy to clipboard to get everything.
Repository: tristanhimmelman/ObjectMapper
Branch: master
Commit: 6021c6035e83
Files: 71
Total size: 466.6 KB

Directory structure:
gitextract_td_jzmoj/

├── .github/
│   ├── ISSUE_TEMPLATE.md
│   └── pull_request_template.md
├── .gitignore
├── .travis.yml
├── LICENSE
├── ObjectMapper.podspec
├── ObjectMapper.xcodeproj/
│   ├── project.pbxproj
│   ├── project.xcworkspace/
│   │   ├── contents.xcworkspacedata
│   │   └── xcshareddata/
│   │       └── IDEWorkspaceChecks.plist
│   └── xcshareddata/
│       └── xcschemes/
│           ├── ObjectMapper-Mac.xcscheme
│           ├── ObjectMapper-iOS.xcscheme
│           ├── ObjectMapper-tvOS.xcscheme
│           └── ObjectMapper-watchOS.xcscheme
├── ObjectMapper.xcworkspace/
│   ├── contents.xcworkspacedata
│   └── xcshareddata/
│       ├── IDEWorkspaceChecks.plist
│       └── ObjectMapper.xcscmblueprint
├── Package.swift
├── Package@swift-4.2.swift
├── Package@swift-4.swift
├── README-CN.md
├── README.md
├── Sources/
│   ├── CodableTransform.swift
│   ├── CustomDateFormatTransform.swift
│   ├── DataTransform.swift
│   ├── DateFormatterTransform.swift
│   ├── DateTransform.swift
│   ├── DictionaryTransform.swift
│   ├── EnumOperators.swift
│   ├── EnumTransform.swift
│   ├── FromJSON.swift
│   ├── HexColorTransform.swift
│   ├── ISO8601DateTransform.swift
│   ├── ImmutableMappable.swift
│   ├── Info.plist
│   ├── IntegerOperators.swift
│   ├── Map.swift
│   ├── MapError.swift
│   ├── Mappable.swift
│   ├── Mapper.swift
│   ├── NSDecimalNumberTransform.swift
│   ├── ObjectMapper.h
│   ├── Operators.swift
│   ├── Resources/
│   │   └── PrivacyInfo.xcprivacy
│   ├── ToJSON.swift
│   ├── TransformOf.swift
│   ├── TransformOperators.swift
│   ├── TransformType.swift
│   └── URLTransform.swift
└── Tests/
    ├── Info.plist
    └── ObjectMapperTests/
        ├── BasicTypes.swift
        ├── BasicTypesTestsFromJSON.swift
        ├── BasicTypesTestsToJSON.swift
        ├── ClassClusterTests.swift
        ├── CodableTests.swift
        ├── CustomTransformTests.swift
        ├── DataTransformTests.swift
        ├── DictionaryTransformTests.swift
        ├── GenericObjectsTests.swift
        ├── IgnoreNilTests.swift
        ├── ImmutableTests.swift
        ├── MapContextTests.swift
        ├── MappableExtensionsTests.swift
        ├── MappableTypesWithTransformsTests.swift
        ├── NSDecimalNumberTransformTests.swift
        ├── NestedArrayTests.swift
        ├── NestedKeysTests.swift
        ├── NullableKeysFromJSONTests.swift
        ├── ObjectMapperTests.swift
        ├── PerformanceTests.swift
        ├── ToObjectTests.swift
        └── URLTransformTests.swift

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
### Your JSON dictionary:

```json
{
  "name": "ObjectMapper",
  "url": "https://github.com/Hearst-DD/ObjectMapper"
}
```

### Your model:

```swift
struct Repo: Mappable {
  var name: String!
  var url: URL!

  init(_ map: Map) {
    name <- map["name"]
    url <- map["url"]
  }
}
```

### What you did:

```swift
let repo = Mapper<Repo>().map(myJSONDictionary)
```

### What you expected:

I exepected something like:

```swift
Repo(name: "ObjectMapper", url: "https://github.com/Hearst-DD/ObjectMapper")
```

### What you got:

```swift
Repo(name: "ObjectMapper", url: nil)  // expected the url is mapped correctly
```



================================================
FILE: .github/pull_request_template.md
================================================
## Why <!-- Describe why you are making the change -->



## What <!-- Describe what changed -->

================================================
FILE: .gitignore
================================================
# Xcode
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.xcuserstate
# AppCode etc.
.idea/
# Desktop Servies
.DS_Store

# Carthage
Carthage/Build

# Swift package manager
.build/
Packages/


================================================
FILE: .travis.yml
================================================
language: objective-c
osx_image: xcode11.3

env:
  global:
    - LANG=en_US.UTF-8
    - LC_ALL=en_US.UTF-8
    - WORKSPACE="ObjectMapper.xcworkspace"
    - IOS_FRAMEWORK_SCHEME="ObjectMapper-iOS"
    - OSX_FRAMEWORK_SCHEME="ObjectMapper-Mac"
    - TVOS_FRAMEWORK_SCHEME="ObjectMapper-tvOS"
    - WATCHOS_FRAMEWORK_SCHEME="ObjectMapper-watchOS"
  matrix:
    #iOS
    - DESTINATION="OS=11.4,name=iPhone X"            SCHEME="$IOS_FRAMEWORK_SCHEME"      RUN_TESTS="YES"
    - DESTINATION="OS=10.3.1,name=iPhone 7 Plus"     SCHEME="$IOS_FRAMEWORK_SCHEME"      RUN_TESTS="YES"
    #macOS
    - DESTINATION="arch=x86_64"                      SCHEME="$OSX_FRAMEWORK_SCHEME"      RUN_TESTS="YES"
    #tvOS
    - DESTINATION="OS=11.4,name=Apple TV 4K"         SCHEME="$TVOS_FRAMEWORK_SCHEME"     RUN_TESTS="YES"

before_install:
  - gem install xcpretty --no-document --quiet

script:
  - set -o pipefail
  - xcodebuild -version
  - xcodebuild -showsdks

  # Build Framework in Debug and Run Tests if specified
  - if [ $RUN_TESTS == "YES" ]; then
      travis_retry xcodebuild -workspace "$WORKSPACE" -scheme "$SCHEME" -destination "$DESTINATION" -configuration Debug ONLY_ACTIVE_ARCH=NO test | xcpretty -c;
    else
      travis_retry xcodebuild -workspace "$WORKSPACE" -scheme "$SCHEME" -destination "$DESTINATION" -configuration Debug ONLY_ACTIVE_ARCH=NO build | xcpretty -c;
    fi

  # Build Framework in Release and Run Tests if specified
  - if [ $RUN_TESTS == "YES" ]; then
      travis_retry xcodebuild -workspace "$WORKSPACE" -scheme "$SCHEME" -destination "$DESTINATION" -configuration Release ONLY_ACTIVE_ARCH=NO test | xcpretty -c;
    else
      travis_retry xcodebuild -workspace "$WORKSPACE" -scheme "$SCHEME" -destination "$DESTINATION" -configuration Release ONLY_ACTIVE_ARCH=NO build | xcpretty -c;
    fi

notifications:
  email: false


================================================
FILE: LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2014 Hearst

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


================================================
FILE: ObjectMapper.podspec
================================================
Pod::Spec.new do |s|
  s.name = 'ObjectMapper'
  s.version = '4.4.2'
  s.license = 'MIT'
  # Ensure developers won't hit CocoaPods/CocoaPods#11402 with the resource
  # bundle for the privacy manifest.
  s.cocoapods_version = '>= 1.12.0'
  s.summary = 'JSON Object mapping written in Swift'
  s.homepage = 'https://github.com/tristanhimmelman/ObjectMapper'
  s.authors = { 'Tristan Himmelman' => 'tristanhimmelman@gmail.com' }
  s.source = { :git => 'https://github.com/tristanhimmelman/ObjectMapper.git', :tag => s.version.to_s }
  s.resource_bundle = {
    "Privacy" => "Sources/Resources/PrivacyInfo.xcprivacy"
  }
  s.watchos.deployment_target = '2.0'
  s.ios.deployment_target = '13.0'
  s.osx.deployment_target = '12.0'
  s.tvos.deployment_target = '9.0'

  s.swift_version = '5.0'

  s.requires_arc = true
  s.source_files = 'Sources/**/*.swift'
end


================================================
FILE: ObjectMapper.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 46;
	objects = {

/* Begin PBXBuildFile section */
		030114AD1D951A5300FBFD4F /* ImmutableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 030114AA1D95197100FBFD4F /* ImmutableTests.swift */; };
		030114AE1D951A5600FBFD4F /* ImmutableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 030114AA1D95197100FBFD4F /* ImmutableTests.swift */; };
		030114AF1D951A6C00FBFD4F /* ImmutableMappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 030114A81D95187600FBFD4F /* ImmutableMappable.swift */; };
		030114B01D951A7100FBFD4F /* ImmutableMappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 030114A81D95187600FBFD4F /* ImmutableMappable.swift */; };
		030114B11D951A7500FBFD4F /* ImmutableMappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 030114A81D95187600FBFD4F /* ImmutableMappable.swift */; };
		030E75F51E588BF30027D94A /* IntegerOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 038F0A021E55FE2400613148 /* IntegerOperators.swift */; };
		030E75F61E588BF80027D94A /* IntegerOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 038F0A021E55FE2400613148 /* IntegerOperators.swift */; };
		030E75F71E588BFC0027D94A /* IntegerOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 038F0A021E55FE2400613148 /* IntegerOperators.swift */; };
		038F0A031E55FE2400613148 /* IntegerOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 038F0A021E55FE2400613148 /* IntegerOperators.swift */; };
		1865416F1E972FA800F95A19 /* URLTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1865416E1E972FA800F95A19 /* URLTransformTests.swift */; };
		37AFD9B91AAD191C00AB59B5 /* CustomDateFormatTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AFD9B81AAD191C00AB59B5 /* CustomDateFormatTransform.swift */; };
		3BAD2C0C1BDDB10D00E6B203 /* Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BAD2C0B1BDDB10D00E6B203 /* Mappable.swift */; };
		3BAD2C0D1BDDB10D00E6B203 /* Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BAD2C0B1BDDB10D00E6B203 /* Mappable.swift */; };
		3BAD2C0E1BDDB10D00E6B203 /* Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BAD2C0B1BDDB10D00E6B203 /* Mappable.swift */; };
		3BAD2C101BDDC0B000E6B203 /* MappableExtensionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BAD2C0F1BDDC0B000E6B203 /* MappableExtensionsTests.swift */; };
		3BAD2C111BDDC0B000E6B203 /* MappableExtensionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BAD2C0F1BDDC0B000E6B203 /* MappableExtensionsTests.swift */; };
		491D7995216FB8B2006DB931 /* CodableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 491D7994216FB8B2006DB931 /* CodableTests.swift */; };
		491D7996216FB8B2006DB931 /* CodableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 491D7994216FB8B2006DB931 /* CodableTests.swift */; };
		491D7997216FB8B2006DB931 /* CodableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 491D7994216FB8B2006DB931 /* CodableTests.swift */; };
		491D799C216FBA9A006DB931 /* CodableTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 491D7998216FBA93006DB931 /* CodableTransform.swift */; };
		491D799D216FBA9A006DB931 /* CodableTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 491D7998216FBA93006DB931 /* CodableTransform.swift */; };
		491D799E216FBA9B006DB931 /* CodableTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 491D7998216FBA93006DB931 /* CodableTransform.swift */; };
		491D799F216FBA9B006DB931 /* CodableTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 491D7998216FBA93006DB931 /* CodableTransform.swift */; };
		6100B1C01BD76A030011114A /* NestedArrayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6100B1BF1BD76A020011114A /* NestedArrayTests.swift */; };
		6A05B7B01BE274BE00F19B53 /* ObjectMapper.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6A05B7A61BE274BE00F19B53 /* ObjectMapper.framework */; };
		6A05B7BD1BE274E800F19B53 /* ObjectMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AAC8F7B19F03C2900E7A677 /* ObjectMapper.h */; settings = {ATTRIBUTES = (Public, ); }; };
		6A0BF1FF1C0B53470083D1AF /* ToObjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A0BF1FE1C0B53470083D1AF /* ToObjectTests.swift */; };
		6A0BF2001C0B53470083D1AF /* ToObjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A0BF1FE1C0B53470083D1AF /* ToObjectTests.swift */; };
		6A0BF2011C0B53470083D1AF /* ToObjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A0BF1FE1C0B53470083D1AF /* ToObjectTests.swift */; };
		6A2AD0451B2C786C0097E150 /* Mapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC419F048FE00E7A677 /* Mapper.swift */; };
		6A2AD0461B2C786C0097E150 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC519F048FE00E7A677 /* Operators.swift */; };
		6A2AD0471B2C786C0097E150 /* FromJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC319F048FE00E7A677 /* FromJSON.swift */; };
		6A2AD0481B2C786C0097E150 /* ToJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC719F048FE00E7A677 /* ToJSON.swift */; };
		6A2AD0491B2C786C0097E150 /* DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FCB19F048FE00E7A677 /* DateTransform.swift */; };
		6A2AD04A1B2C786C0097E150 /* DateFormatterTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A51372B1AADDE2700B82516 /* DateFormatterTransform.swift */; };
		6A2AD04B1B2C786C0097E150 /* ISO8601DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = D86BDEA31A51E5AC00120819 /* ISO8601DateTransform.swift */; };
		6A2AD04C1B2C786C0097E150 /* CustomDateFormatTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AFD9B81AAD191C00AB59B5 /* CustomDateFormatTransform.swift */; };
		6A2AD04D1B2C786C0097E150 /* TransformOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD71C8C01A7218AD009D4161 /* TransformOf.swift */; };
		6A2AD04E1B2C786C0097E150 /* TransformType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD50B6FC1A82518300744312 /* TransformType.swift */; };
		6A2AD04F1B2C786C0097E150 /* URLTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A6C54CF19FE8DB600239454 /* URLTransform.swift */; };
		6A2AD0501B2C786C0097E150 /* EnumTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1E7F361ABC44C000F9B1CF /* EnumTransform.swift */; };
		6A3774341A31427F00CC0AB5 /* BasicTypesTestsToJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A3774331A31427F00CC0AB5 /* BasicTypesTestsToJSON.swift */; };
		6A412A171BAC770C001C3F67 /* ClassClusterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A412A161BAC770C001C3F67 /* ClassClusterTests.swift */; };
		6A412A181BAC830B001C3F67 /* ClassClusterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A412A161BAC770C001C3F67 /* ClassClusterTests.swift */; };
		6A412A241BB0DA26001C3F67 /* PerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A412A231BB0DA26001C3F67 /* PerformanceTests.swift */; };
		6A412A251BB0DA26001C3F67 /* PerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A412A231BB0DA26001C3F67 /* PerformanceTests.swift */; };
		6A442CA11CE251F100AB4F1F /* MapContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A442CA01CE251F100AB4F1F /* MapContextTests.swift */; };
		6A442CA21CE251F100AB4F1F /* MapContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A442CA01CE251F100AB4F1F /* MapContextTests.swift */; };
		6A442CA31CE251F100AB4F1F /* MapContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A442CA01CE251F100AB4F1F /* MapContextTests.swift */; };
		6A51372C1AADDE2700B82516 /* DateFormatterTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A51372B1AADDE2700B82516 /* DateFormatterTransform.swift */; };
		6A51372F1AADE12C00B82516 /* CustomTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A51372E1AADE12C00B82516 /* CustomTransformTests.swift */; };
		6A6AEB961A93874F002573D3 /* BasicTypesTestsFromJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A6AEB951A93874F002573D3 /* BasicTypesTestsFromJSON.swift */; };
		6A6AEB981A9387D0002573D3 /* BasicTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A6AEB971A9387D0002573D3 /* BasicTypes.swift */; };
		6A6C54D019FE8DB600239454 /* URLTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A6C54CF19FE8DB600239454 /* URLTransform.swift */; };
		6A715C4A1D05B1FA0054AD62 /* IgnoreNilTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A715C491D05B1FA0054AD62 /* IgnoreNilTests.swift */; };
		6A715C4B1D05B1FA0054AD62 /* IgnoreNilTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A715C491D05B1FA0054AD62 /* IgnoreNilTests.swift */; };
		6A715C4C1D05B1FA0054AD62 /* IgnoreNilTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A715C491D05B1FA0054AD62 /* IgnoreNilTests.swift */; };
		6AA1F66B1BE94687006EF513 /* ClassClusterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A412A161BAC770C001C3F67 /* ClassClusterTests.swift */; };
		6AA1F66C1BE94687006EF513 /* PerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A412A231BB0DA26001C3F67 /* PerformanceTests.swift */; };
		6AA1F66D1BE9468D006EF513 /* NestedArrayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6100B1BF1BD76A020011114A /* NestedArrayTests.swift */; };
		6AA1F66E1BE991FF006EF513 /* Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BAD2C0B1BDDB10D00E6B203 /* Mappable.swift */; };
		6AA1F66F1BE9921C006EF513 /* MappableExtensionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BAD2C0F1BDDC0B000E6B203 /* MappableExtensionsTests.swift */; };
		6AAC8F7C19F03C2900E7A677 /* ObjectMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AAC8F7B19F03C2900E7A677 /* ObjectMapper.h */; settings = {ATTRIBUTES = (Public, ); }; };
		6AAC8F8619F03C2900E7A677 /* ObjectMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8F8519F03C2900E7A677 /* ObjectMapperTests.swift */; };
		6AAC8FCD19F048FE00E7A677 /* FromJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC319F048FE00E7A677 /* FromJSON.swift */; };
		6AAC8FCE19F048FE00E7A677 /* Mapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC419F048FE00E7A677 /* Mapper.swift */; };
		6AAC8FCF19F048FE00E7A677 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC519F048FE00E7A677 /* Operators.swift */; };
		6AAC8FD119F048FE00E7A677 /* ToJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC719F048FE00E7A677 /* ToJSON.swift */; };
		6AAC8FD319F048FE00E7A677 /* DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FCB19F048FE00E7A677 /* DateTransform.swift */; };
		6AAE6A431ACED93500FBC899 /* ObjectMapper.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CD1602FF1AC023D5000CD69A /* ObjectMapper.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
		6AC458191BA350CF00054758 /* ObjectMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AAC8F7B19F03C2900E7A677 /* ObjectMapper.h */; settings = {ATTRIBUTES = (Public, ); }; };
		6AC53CAB1F031B85008BDDCD /* ImmutableMappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 030114A81D95187600FBFD4F /* ImmutableMappable.swift */; };
		6AC53CAC1F03FA1B008BDDCD /* ImmutableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 030114AA1D95197100FBFD4F /* ImmutableTests.swift */; };
		6AC692341BE3FD3A004C119A /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ACB15D11BC7F1D0006C029C /* Map.swift */; };
		6AC692351BE3FD3A004C119A /* Mapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC419F048FE00E7A677 /* Mapper.swift */; };
		6AC692361BE3FD3A004C119A /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC519F048FE00E7A677 /* Operators.swift */; };
		6AC692371BE3FD3A004C119A /* FromJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC319F048FE00E7A677 /* FromJSON.swift */; };
		6AC692381BE3FD3A004C119A /* ToJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC719F048FE00E7A677 /* ToJSON.swift */; };
		6AC692391BE3FD3A004C119A /* DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FCB19F048FE00E7A677 /* DateTransform.swift */; };
		6AC6923A1BE3FD3A004C119A /* DateFormatterTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A51372B1AADDE2700B82516 /* DateFormatterTransform.swift */; };
		6AC6923B1BE3FD3A004C119A /* ISO8601DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = D86BDEA31A51E5AC00120819 /* ISO8601DateTransform.swift */; };
		6AC6923C1BE3FD3A004C119A /* CustomDateFormatTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AFD9B81AAD191C00AB59B5 /* CustomDateFormatTransform.swift */; };
		6AC6923D1BE3FD3A004C119A /* TransformOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD71C8C01A7218AD009D4161 /* TransformOf.swift */; };
		6AC6923E1BE3FD3A004C119A /* TransformType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD50B6FC1A82518300744312 /* TransformType.swift */; };
		6AC6923F1BE3FD3A004C119A /* URLTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A6C54CF19FE8DB600239454 /* URLTransform.swift */; };
		6AC692401BE3FD3A004C119A /* EnumTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1E7F361ABC44C000F9B1CF /* EnumTransform.swift */; };
		6AC692411BE3FD45004C119A /* BasicTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A6AEB971A9387D0002573D3 /* BasicTypes.swift */; };
		6AC692421BE3FD45004C119A /* BasicTypesTestsFromJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A6AEB951A93874F002573D3 /* BasicTypesTestsFromJSON.swift */; };
		6AC692431BE3FD45004C119A /* BasicTypesTestsToJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A3774331A31427F00CC0AB5 /* BasicTypesTestsToJSON.swift */; };
		6AC692441BE3FD45004C119A /* CustomTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A51372E1AADE12C00B82516 /* CustomTransformTests.swift */; };
		6AC692451BE3FD45004C119A /* NestedKeysTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD44374C1AAE9C1100A271BA /* NestedKeysTests.swift */; };
		6AC692461BE3FD45004C119A /* NestedArrayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6100B1BF1BD76A020011114A /* NestedArrayTests.swift */; };
		6AC692471BE3FD45004C119A /* ObjectMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8F8519F03C2900E7A677 /* ObjectMapperTests.swift */; };
		6ACB15D21BC7F1D0006C029C /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ACB15D11BC7F1D0006C029C /* Map.swift */; };
		6ACB15D31BC7F1D0006C029C /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ACB15D11BC7F1D0006C029C /* Map.swift */; };
		6ACB15D41BC7F1D0006C029C /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ACB15D11BC7F1D0006C029C /* Map.swift */; };
		6AECC9E61D79E29100222E7A /* DictionaryTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AECC9E51D79E29100222E7A /* DictionaryTransformTests.swift */; };
		6AECC9E71D79E29100222E7A /* DictionaryTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AECC9E51D79E29100222E7A /* DictionaryTransformTests.swift */; };
		6AECC9E81D79E29100222E7A /* DictionaryTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AECC9E51D79E29100222E7A /* DictionaryTransformTests.swift */; };
		6AF148841D999E31002BEA2C /* GenericObjectsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF148831D999E31002BEA2C /* GenericObjectsTests.swift */; };
		6AF148851D999E31002BEA2C /* GenericObjectsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF148831D999E31002BEA2C /* GenericObjectsTests.swift */; };
		6AF148861D999E31002BEA2C /* GenericObjectsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF148831D999E31002BEA2C /* GenericObjectsTests.swift */; };
		6AF148881D99A25B002BEA2C /* MapError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF148871D99A25B002BEA2C /* MapError.swift */; };
		6AF148891D99A25B002BEA2C /* MapError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF148871D99A25B002BEA2C /* MapError.swift */; };
		6AF1488A1D99A25B002BEA2C /* MapError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF148871D99A25B002BEA2C /* MapError.swift */; };
		6AF1488B1D99A25B002BEA2C /* MapError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF148871D99A25B002BEA2C /* MapError.swift */; };
		6AF1488D1D99A7A6002BEA2C /* TransformOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF1488C1D99A7A6002BEA2C /* TransformOperators.swift */; };
		6AF1488E1D99A7A6002BEA2C /* TransformOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF1488C1D99A7A6002BEA2C /* TransformOperators.swift */; };
		6AF1488F1D99A7A6002BEA2C /* TransformOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF1488C1D99A7A6002BEA2C /* TransformOperators.swift */; };
		6AF148901D99A7A6002BEA2C /* TransformOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF1488C1D99A7A6002BEA2C /* TransformOperators.swift */; };
		6AF148921D99A7CA002BEA2C /* EnumOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF148911D99A7CA002BEA2C /* EnumOperators.swift */; };
		6AF148931D99A7CA002BEA2C /* EnumOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF148911D99A7CA002BEA2C /* EnumOperators.swift */; };
		6AF148941D99A7CA002BEA2C /* EnumOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF148911D99A7CA002BEA2C /* EnumOperators.swift */; };
		6AF148951D99A7CA002BEA2C /* EnumOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF148911D99A7CA002BEA2C /* EnumOperators.swift */; };
		797FEDCE1DAB855F00E31F75 /* HexColorTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79E591C61DAB7FED008E2EEF /* HexColorTransform.swift */; };
		797FEDCF1DAB855F00E31F75 /* HexColorTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79E591C61DAB7FED008E2EEF /* HexColorTransform.swift */; };
		797FEDD01DAB856000E31F75 /* HexColorTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79E591C61DAB7FED008E2EEF /* HexColorTransform.swift */; };
		79E591C71DAB7FED008E2EEF /* HexColorTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79E591C61DAB7FED008E2EEF /* HexColorTransform.swift */; };
		84D4F8521CC3B643008B0FB6 /* NSDecimalNumberTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D4F8511CC3B643008B0FB6 /* NSDecimalNumberTransform.swift */; };
		84D4F8531CC3B643008B0FB6 /* NSDecimalNumberTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D4F8511CC3B643008B0FB6 /* NSDecimalNumberTransform.swift */; };
		84D4F8541CC3B643008B0FB6 /* NSDecimalNumberTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D4F8511CC3B643008B0FB6 /* NSDecimalNumberTransform.swift */; };
		84D4F8551CC3B643008B0FB6 /* NSDecimalNumberTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D4F8511CC3B643008B0FB6 /* NSDecimalNumberTransform.swift */; };
		84D4F8571CC3B71B008B0FB6 /* NSDecimalNumberTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D4F8561CC3B71B008B0FB6 /* NSDecimalNumberTransformTests.swift */; };
		84D4F8581CC3B71B008B0FB6 /* NSDecimalNumberTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D4F8561CC3B71B008B0FB6 /* NSDecimalNumberTransformTests.swift */; };
		84D4F8591CC3B71B008B0FB6 /* NSDecimalNumberTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D4F8561CC3B71B008B0FB6 /* NSDecimalNumberTransformTests.swift */; };
		891804CD1C122AF000E5C3EE /* MappableTypesWithTransformsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 891804CC1C122AF000E5C3EE /* MappableTypesWithTransformsTests.swift */; };
		891804CE1C122AF000E5C3EE /* MappableTypesWithTransformsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 891804CC1C122AF000E5C3EE /* MappableTypesWithTransformsTests.swift */; };
		891804CF1C122AF000E5C3EE /* MappableTypesWithTransformsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 891804CC1C122AF000E5C3EE /* MappableTypesWithTransformsTests.swift */; };
		997B4A471D3FA20D005E3F31 /* DictionaryTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 997B4A461D3FA20D005E3F31 /* DictionaryTransform.swift */; };
		997B4A481D3FA20D005E3F31 /* DictionaryTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 997B4A461D3FA20D005E3F31 /* DictionaryTransform.swift */; };
		997B4A491D3FA20D005E3F31 /* DictionaryTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 997B4A461D3FA20D005E3F31 /* DictionaryTransform.swift */; };
		997B4A4A1D3FA20D005E3F31 /* DictionaryTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 997B4A461D3FA20D005E3F31 /* DictionaryTransform.swift */; };
		BA9D143C246BF0930037233E /* URLTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1865416E1E972FA800F95A19 /* URLTransformTests.swift */; };
		BA9D143D246BF0940037233E /* URLTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1865416E1E972FA800F95A19 /* URLTransformTests.swift */; };
		BC1E7F371ABC44C000F9B1CF /* EnumTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1E7F361ABC44C000F9B1CF /* EnumTransform.swift */; };
		C135CAB41D762F6900BA9338 /* DataTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = C135CAB31D762F6900BA9338 /* DataTransform.swift */; };
		C135CAB71D76303E00BA9338 /* DataTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C135CAB61D76303E00BA9338 /* DataTransformTests.swift */; };
		C135CAB81D76303E00BA9338 /* DataTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C135CAB61D76303E00BA9338 /* DataTransformTests.swift */; };
		C135CAB91D76303E00BA9338 /* DataTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C135CAB61D76303E00BA9338 /* DataTransformTests.swift */; };
		C135CABA1D7631DB00BA9338 /* DataTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = C135CAB31D762F6900BA9338 /* DataTransform.swift */; };
		C135CABB1D7631DB00BA9338 /* DataTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = C135CAB31D762F6900BA9338 /* DataTransform.swift */; };
		C135CABC1D7631DC00BA9338 /* DataTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = C135CAB31D762F6900BA9338 /* DataTransform.swift */; };
		CD16030A1AC023D6000CD69A /* ObjectMapper.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD1602FF1AC023D5000CD69A /* ObjectMapper.framework */; };
		CD1603181AC02437000CD69A /* ObjectMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AAC8F7B19F03C2900E7A677 /* ObjectMapper.h */; settings = {ATTRIBUTES = (Public, ); }; };
		CD1603191AC02451000CD69A /* Mapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC419F048FE00E7A677 /* Mapper.swift */; };
		CD16031A1AC02451000CD69A /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC519F048FE00E7A677 /* Operators.swift */; };
		CD16031B1AC02451000CD69A /* FromJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC319F048FE00E7A677 /* FromJSON.swift */; };
		CD16031C1AC02451000CD69A /* ToJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC719F048FE00E7A677 /* ToJSON.swift */; };
		CD16031D1AC02461000CD69A /* DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FCB19F048FE00E7A677 /* DateTransform.swift */; };
		CD16031E1AC02461000CD69A /* DateFormatterTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A51372B1AADDE2700B82516 /* DateFormatterTransform.swift */; };
		CD16031F1AC02461000CD69A /* ISO8601DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = D86BDEA31A51E5AC00120819 /* ISO8601DateTransform.swift */; };
		CD1603201AC02461000CD69A /* CustomDateFormatTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AFD9B81AAD191C00AB59B5 /* CustomDateFormatTransform.swift */; };
		CD1603211AC02472000CD69A /* TransformOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD71C8C01A7218AD009D4161 /* TransformOf.swift */; };
		CD1603221AC02472000CD69A /* TransformType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD50B6FC1A82518300744312 /* TransformType.swift */; };
		CD1603231AC02472000CD69A /* URLTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A6C54CF19FE8DB600239454 /* URLTransform.swift */; };
		CD1603241AC02472000CD69A /* EnumTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1E7F361ABC44C000F9B1CF /* EnumTransform.swift */; };
		CD1603251AC02480000CD69A /* BasicTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A6AEB971A9387D0002573D3 /* BasicTypes.swift */; };
		CD1603261AC02480000CD69A /* BasicTypesTestsFromJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A6AEB951A93874F002573D3 /* BasicTypesTestsFromJSON.swift */; };
		CD1603271AC02480000CD69A /* BasicTypesTestsToJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A3774331A31427F00CC0AB5 /* BasicTypesTestsToJSON.swift */; };
		CD1603281AC02480000CD69A /* CustomTransformTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A51372E1AADE12C00B82516 /* CustomTransformTests.swift */; };
		CD1603291AC02480000CD69A /* NestedKeysTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD44374C1AAE9C1100A271BA /* NestedKeysTests.swift */; };
		CD16032A1AC02480000CD69A /* ObjectMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8F8519F03C2900E7A677 /* ObjectMapperTests.swift */; };
		CD4437491AAD692B00A271BA /* ObjectMapper.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AAC8F7619F03C2900E7A677 /* ObjectMapper.framework */; };
		CD44374B1AAD698400A271BA /* ObjectMapper.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 6AAC8F7619F03C2900E7A677 /* ObjectMapper.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
		CD44374D1AAE9C1100A271BA /* NestedKeysTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD44374C1AAE9C1100A271BA /* NestedKeysTests.swift */; };
		CD50B6FD1A82518300744312 /* TransformType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD50B6FC1A82518300744312 /* TransformType.swift */; };
		CD71C8C11A7218AD009D4161 /* TransformOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD71C8C01A7218AD009D4161 /* TransformOf.swift */; };
		D86BDEA41A51E5AD00120819 /* ISO8601DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = D86BDEA31A51E5AC00120819 /* ISO8601DateTransform.swift */; };
		DBB9B4232142A2D800078E5A /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ACB15D11BC7F1D0006C029C /* Map.swift */; };
		DBB9B4242142A2E100078E5A /* MapError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF148871D99A25B002BEA2C /* MapError.swift */; };
		DBB9B4252142A2E100078E5A /* Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BAD2C0B1BDDB10D00E6B203 /* Mappable.swift */; };
		DBB9B4262142A2E100078E5A /* ImmutableMappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 030114A81D95187600FBFD4F /* ImmutableMappable.swift */; };
		DBB9B4272142A2E100078E5A /* Mapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC419F048FE00E7A677 /* Mapper.swift */; };
		DBB9B4282142A2E600078E5A /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC519F048FE00E7A677 /* Operators.swift */; };
		DBB9B4292142A2E600078E5A /* EnumOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF148911D99A7CA002BEA2C /* EnumOperators.swift */; };
		DBB9B42A2142A2E600078E5A /* TransformOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF1488C1D99A7A6002BEA2C /* TransformOperators.swift */; };
		DBB9B42B2142A2E600078E5A /* IntegerOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 038F0A021E55FE2400613148 /* IntegerOperators.swift */; };
		DBB9B42C2142A2E600078E5A /* FromJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC319F048FE00E7A677 /* FromJSON.swift */; };
		DBB9B42D2142A2E600078E5A /* ToJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FC719F048FE00E7A677 /* ToJSON.swift */; };
		DBB9B42E2142A2ED00078E5A /* TransformOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD71C8C01A7218AD009D4161 /* TransformOf.swift */; };
		DBB9B42F2142A2ED00078E5A /* TransformType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD50B6FC1A82518300744312 /* TransformType.swift */; };
		DBB9B4302142A2ED00078E5A /* URLTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A6C54CF19FE8DB600239454 /* URLTransform.swift */; };
		DBB9B4312142A2ED00078E5A /* EnumTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC1E7F361ABC44C000F9B1CF /* EnumTransform.swift */; };
		DBB9B4322142A2ED00078E5A /* NSDecimalNumberTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D4F8511CC3B643008B0FB6 /* NSDecimalNumberTransform.swift */; };
		DBB9B4332142A2ED00078E5A /* DictionaryTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 997B4A461D3FA20D005E3F31 /* DictionaryTransform.swift */; };
		DBB9B4342142A2ED00078E5A /* DataTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = C135CAB31D762F6900BA9338 /* DataTransform.swift */; };
		DBB9B4352142A2ED00078E5A /* HexColorTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79E591C61DAB7FED008E2EEF /* HexColorTransform.swift */; };
		DBB9B4362142A2F200078E5A /* DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAC8FCB19F048FE00E7A677 /* DateTransform.swift */; };
		DBB9B4372142A2F200078E5A /* DateFormatterTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A51372B1AADDE2700B82516 /* DateFormatterTransform.swift */; };
		DBB9B4382142A2F200078E5A /* ISO8601DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = D86BDEA31A51E5AC00120819 /* ISO8601DateTransform.swift */; };
		DBB9B4392142A2F200078E5A /* CustomDateFormatTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AFD9B81AAD191C00AB59B5 /* CustomDateFormatTransform.swift */; };
		DC99C8CC1CA261A8005C788C /* NullableKeysFromJSONTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC99C8CB1CA261A8005C788C /* NullableKeysFromJSONTests.swift */; };
		DC99C8CD1CA261AD005C788C /* NullableKeysFromJSONTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC99C8CB1CA261A8005C788C /* NullableKeysFromJSONTests.swift */; };
		DC99C8CE1CA261AE005C788C /* NullableKeysFromJSONTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC99C8CB1CA261A8005C788C /* NullableKeysFromJSONTests.swift */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
		6A05B7B11BE274BE00F19B53 /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = 6AAC8F6D19F03C2900E7A677 /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = 6A05B7A51BE274BE00F19B53;
			remoteInfo = "ObjectMapper-tvOS";
		};
		6AAC8FD519F04A5600E7A677 /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = 6AAC8F6D19F03C2900E7A677 /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = 6AAC8F7519F03C2900E7A677;
			remoteInfo = ObjectMapper;
		};
		CD16030B1AC023D6000CD69A /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = 6AAC8F6D19F03C2900E7A677 /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = CD1602FE1AC023D5000CD69A;
			remoteInfo = "ObjectMapper-Mac";
		};
/* End PBXContainerItemProxy section */

/* Begin PBXCopyFilesBuildPhase section */
		6AAE6A421ACED92700FBC899 /* CopyFiles */ = {
			isa = PBXCopyFilesBuildPhase;
			buildActionMask = 2147483647;
			dstPath = "";
			dstSubfolderSpec = 10;
			files = (
				6AAE6A431ACED93500FBC899 /* ObjectMapper.framework in CopyFiles */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		CD44374A1AAD696B00A271BA /* Copy Frameworks */ = {
			isa = PBXCopyFilesBuildPhase;
			buildActionMask = 2147483647;
			dstPath = "";
			dstSubfolderSpec = 10;
			files = (
				CD44374B1AAD698400A271BA /* ObjectMapper.framework in Copy Frameworks */,
			);
			name = "Copy Frameworks";
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
		030114A81D95187600FBFD4F /* ImmutableMappable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImmutableMappable.swift; sourceTree = "<group>"; };
		030114AA1D95197100FBFD4F /* ImmutableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ImmutableTests.swift; path = ObjectMapperTests/ImmutableTests.swift; sourceTree = "<group>"; };
		038F0A021E55FE2400613148 /* IntegerOperators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IntegerOperators.swift; sourceTree = "<group>"; };
		1865416E1E972FA800F95A19 /* URLTransformTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = URLTransformTests.swift; path = ObjectMapperTests/URLTransformTests.swift; sourceTree = "<group>"; };
		37AFD9B81AAD191C00AB59B5 /* CustomDateFormatTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomDateFormatTransform.swift; sourceTree = "<group>"; };
		3BAD2C0B1BDDB10D00E6B203 /* Mappable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Mappable.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		3BAD2C0F1BDDC0B000E6B203 /* MappableExtensionsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MappableExtensionsTests.swift; path = ObjectMapperTests/MappableExtensionsTests.swift; sourceTree = "<group>"; };
		491D7994216FB8B2006DB931 /* CodableTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = CodableTests.swift; path = ObjectMapperTests/CodableTests.swift; sourceTree = "<group>"; };
		491D7998216FBA93006DB931 /* CodableTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CodableTransform.swift; sourceTree = "<group>"; };
		6100B1BF1BD76A020011114A /* NestedArrayTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = NestedArrayTests.swift; path = ObjectMapperTests/NestedArrayTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		6A05B7A61BE274BE00F19B53 /* ObjectMapper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ObjectMapper.framework; sourceTree = BUILT_PRODUCTS_DIR; };
		6A05B7AF1BE274BE00F19B53 /* ObjectMapper-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ObjectMapper-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
		6A0BF1FE1C0B53470083D1AF /* ToObjectTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ToObjectTests.swift; path = ObjectMapperTests/ToObjectTests.swift; sourceTree = "<group>"; };
		6A2AD03D1B2C78540097E150 /* ObjectMapper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ObjectMapper.framework; sourceTree = BUILT_PRODUCTS_DIR; };
		6A3774331A31427F00CC0AB5 /* BasicTypesTestsToJSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = BasicTypesTestsToJSON.swift; path = ObjectMapperTests/BasicTypesTestsToJSON.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		6A412A161BAC770C001C3F67 /* ClassClusterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ClassClusterTests.swift; path = ObjectMapperTests/ClassClusterTests.swift; sourceTree = "<group>"; };
		6A412A231BB0DA26001C3F67 /* PerformanceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PerformanceTests.swift; path = ObjectMapperTests/PerformanceTests.swift; sourceTree = "<group>"; };
		6A442CA01CE251F100AB4F1F /* MapContextTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = MapContextTests.swift; path = ObjectMapperTests/MapContextTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		6A51372B1AADDE2700B82516 /* DateFormatterTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateFormatterTransform.swift; sourceTree = "<group>"; };
		6A51372E1AADE12C00B82516 /* CustomTransformTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = CustomTransformTests.swift; path = ObjectMapperTests/CustomTransformTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		6A6AEB951A93874F002573D3 /* BasicTypesTestsFromJSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BasicTypesTestsFromJSON.swift; path = ObjectMapperTests/BasicTypesTestsFromJSON.swift; sourceTree = "<group>"; };
		6A6AEB971A9387D0002573D3 /* BasicTypes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = BasicTypes.swift; path = ObjectMapperTests/BasicTypes.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		6A6C54CF19FE8DB600239454 /* URLTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLTransform.swift; sourceTree = "<group>"; };
		6A715C491D05B1FA0054AD62 /* IgnoreNilTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IgnoreNilTests.swift; path = ObjectMapperTests/IgnoreNilTests.swift; sourceTree = "<group>"; };
		6A9EEBD41AC5BFA30011F22C /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; lineEnding = 0; path = README.md; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.markdown; };
		6AAC8F7619F03C2900E7A677 /* ObjectMapper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ObjectMapper.framework; sourceTree = BUILT_PRODUCTS_DIR; };
		6AAC8F7A19F03C2900E7A677 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		6AAC8F7B19F03C2900E7A677 /* ObjectMapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ObjectMapper.h; sourceTree = "<group>"; };
		6AAC8F8119F03C2900E7A677 /* ObjectMapper-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ObjectMapper-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
		6AAC8F8419F03C2900E7A677 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		6AAC8F8519F03C2900E7A677 /* ObjectMapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = ObjectMapperTests.swift; path = ObjectMapperTests/ObjectMapperTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		6AAC8FC319F048FE00E7A677 /* FromJSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = FromJSON.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		6AAC8FC419F048FE00E7A677 /* Mapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Mapper.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		6AAC8FC519F048FE00E7A677 /* Operators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Operators.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		6AAC8FC719F048FE00E7A677 /* ToJSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ToJSON.swift; sourceTree = "<group>"; };
		6AAC8FCB19F048FE00E7A677 /* DateTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateTransform.swift; sourceTree = "<group>"; };
		6ACB15D11BC7F1D0006C029C /* Map.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Map.swift; sourceTree = "<group>"; };
		6AECC9E51D79E29100222E7A /* DictionaryTransformTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DictionaryTransformTests.swift; path = ObjectMapperTests/DictionaryTransformTests.swift; sourceTree = "<group>"; };
		6AF148831D999E31002BEA2C /* GenericObjectsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GenericObjectsTests.swift; path = ObjectMapperTests/GenericObjectsTests.swift; sourceTree = "<group>"; };
		6AF148871D99A25B002BEA2C /* MapError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapError.swift; sourceTree = "<group>"; };
		6AF1488C1D99A7A6002BEA2C /* TransformOperators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = TransformOperators.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		6AF148911D99A7CA002BEA2C /* EnumOperators.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = EnumOperators.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		79E591C61DAB7FED008E2EEF /* HexColorTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HexColorTransform.swift; sourceTree = "<group>"; };
		84D4F8511CC3B643008B0FB6 /* NSDecimalNumberTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSDecimalNumberTransform.swift; sourceTree = "<group>"; };
		84D4F8561CC3B71B008B0FB6 /* NSDecimalNumberTransformTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NSDecimalNumberTransformTests.swift; path = ObjectMapperTests/NSDecimalNumberTransformTests.swift; sourceTree = "<group>"; };
		891804CC1C122AF000E5C3EE /* MappableTypesWithTransformsTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MappableTypesWithTransformsTests.swift; path = ObjectMapperTests/MappableTypesWithTransformsTests.swift; sourceTree = "<group>"; };
		997B4A461D3FA20D005E3F31 /* DictionaryTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DictionaryTransform.swift; sourceTree = "<group>"; };
		BC1E7F361ABC44C000F9B1CF /* EnumTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EnumTransform.swift; sourceTree = "<group>"; };
		C135CAB31D762F6900BA9338 /* DataTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataTransform.swift; sourceTree = "<group>"; };
		C135CAB61D76303E00BA9338 /* DataTransformTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DataTransformTests.swift; path = ObjectMapperTests/DataTransformTests.swift; sourceTree = "<group>"; };
		CD1602FF1AC023D5000CD69A /* ObjectMapper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ObjectMapper.framework; sourceTree = BUILT_PRODUCTS_DIR; };
		CD1603091AC023D6000CD69A /* ObjectMapper-macOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ObjectMapper-macOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
		CD44374C1AAE9C1100A271BA /* NestedKeysTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = NestedKeysTests.swift; path = ObjectMapperTests/NestedKeysTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		CD50B6FC1A82518300744312 /* TransformType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransformType.swift; sourceTree = "<group>"; };
		CD71C8C01A7218AD009D4161 /* TransformOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = TransformOf.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
		D86BDEA31A51E5AC00120819 /* ISO8601DateTransform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ISO8601DateTransform.swift; sourceTree = "<group>"; };
		DBB9B41F2142A25100078E5A /* libObjectMapper.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libObjectMapper.a; sourceTree = BUILT_PRODUCTS_DIR; };
		DC99C8CB1CA261A8005C788C /* NullableKeysFromJSONTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NullableKeysFromJSONTests.swift; path = ObjectMapperTests/NullableKeysFromJSONTests.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		6A05B7A21BE274BE00F19B53 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		6A05B7AC1BE274BE00F19B53 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				6A05B7B01BE274BE00F19B53 /* ObjectMapper.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		6A2AD0391B2C78540097E150 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		6AAC8F7219F03C2900E7A677 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		6AAC8F7E19F03C2900E7A677 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				CD4437491AAD692B00A271BA /* ObjectMapper.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		CD1602FB1AC023D5000CD69A /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		CD1603061AC023D6000CD69A /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				CD16030A1AC023D6000CD69A /* ObjectMapper.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		DBB9B41C2142A25100078E5A /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		6A51372D1AADDEE400B82516 /* Date */ = {
			isa = PBXGroup;
			children = (
				6AAC8FCB19F048FE00E7A677 /* DateTransform.swift */,
				6A51372B1AADDE2700B82516 /* DateFormatterTransform.swift */,
				D86BDEA31A51E5AC00120819 /* ISO8601DateTransform.swift */,
				37AFD9B81AAD191C00AB59B5 /* CustomDateFormatTransform.swift */,
			);
			name = Date;
			sourceTree = "<group>";
		};
		6AAC8F6C19F03C2900E7A677 = {
			isa = PBXGroup;
			children = (
				6A9EEBD41AC5BFA30011F22C /* README.md */,
				6AAC8F7819F03C2900E7A677 /* ObjectMapper */,
				6AAC8F8219F03C2900E7A677 /* ObjectMapperTests */,
			);
			sourceTree = "<group>";
			usesTabs = 1;
		};
		6AAC8F7719F03C2900E7A677 /* Products */ = {
			isa = PBXGroup;
			children = (
				6AAC8F7619F03C2900E7A677 /* ObjectMapper.framework */,
				6AAC8F8119F03C2900E7A677 /* ObjectMapper-iOSTests.xctest */,
				CD1602FF1AC023D5000CD69A /* ObjectMapper.framework */,
				CD1603091AC023D6000CD69A /* ObjectMapper-macOSTests.xctest */,
				6A2AD03D1B2C78540097E150 /* ObjectMapper.framework */,
				6A05B7A61BE274BE00F19B53 /* ObjectMapper.framework */,
				6A05B7AF1BE274BE00F19B53 /* ObjectMapper-tvOSTests.xctest */,
				DBB9B41F2142A25100078E5A /* libObjectMapper.a */,
			);
			name = Products;
			path = ..;
			sourceTree = "<group>";
		};
		6AAC8F7819F03C2900E7A677 /* ObjectMapper */ = {
			isa = PBXGroup;
			children = (
				6AAC8F7B19F03C2900E7A677 /* ObjectMapper.h */,
				6AAC8FC219F048FE00E7A677 /* Core */,
				6AAC8FCA19F048FE00E7A677 /* Transforms */,
				6AAC8F7919F03C2900E7A677 /* Supporting Files */,
			);
			name = ObjectMapper;
			path = Sources;
			sourceTree = "<group>";
		};
		6AAC8F7919F03C2900E7A677 /* Supporting Files */ = {
			isa = PBXGroup;
			children = (
				6AAC8F7A19F03C2900E7A677 /* Info.plist */,
			);
			name = "Supporting Files";
			sourceTree = "<group>";
		};
		6AAC8F8219F03C2900E7A677 /* ObjectMapperTests */ = {
			isa = PBXGroup;
			children = (
				491D7994216FB8B2006DB931 /* CodableTests.swift */,
				6A6AEB971A9387D0002573D3 /* BasicTypes.swift */,
				6A3774331A31427F00CC0AB5 /* BasicTypesTestsToJSON.swift */,
				6A6AEB951A93874F002573D3 /* BasicTypesTestsFromJSON.swift */,
				6A412A161BAC770C001C3F67 /* ClassClusterTests.swift */,
				6A51372E1AADE12C00B82516 /* CustomTransformTests.swift */,
				C135CAB61D76303E00BA9338 /* DataTransformTests.swift */,
				6AECC9E51D79E29100222E7A /* DictionaryTransformTests.swift */,
				6AF148831D999E31002BEA2C /* GenericObjectsTests.swift */,
				6A715C491D05B1FA0054AD62 /* IgnoreNilTests.swift */,
				030114AA1D95197100FBFD4F /* ImmutableTests.swift */,
				6A442CA01CE251F100AB4F1F /* MapContextTests.swift */,
				3BAD2C0F1BDDC0B000E6B203 /* MappableExtensionsTests.swift */,
				891804CC1C122AF000E5C3EE /* MappableTypesWithTransformsTests.swift */,
				6100B1BF1BD76A020011114A /* NestedArrayTests.swift */,
				CD44374C1AAE9C1100A271BA /* NestedKeysTests.swift */,
				84D4F8561CC3B71B008B0FB6 /* NSDecimalNumberTransformTests.swift */,
				DC99C8CB1CA261A8005C788C /* NullableKeysFromJSONTests.swift */,
				6AAC8F8519F03C2900E7A677 /* ObjectMapperTests.swift */,
				6A412A231BB0DA26001C3F67 /* PerformanceTests.swift */,
				6A0BF1FE1C0B53470083D1AF /* ToObjectTests.swift */,
				1865416E1E972FA800F95A19 /* URLTransformTests.swift */,
				6AAC8F7719F03C2900E7A677 /* Products */,
				6AAC8F8319F03C2900E7A677 /* Supporting Files */,
			);
			name = ObjectMapperTests;
			path = Tests;
			sourceTree = "<group>";
		};
		6AAC8F8319F03C2900E7A677 /* Supporting Files */ = {
			isa = PBXGroup;
			children = (
				6AAC8F8419F03C2900E7A677 /* Info.plist */,
			);
			name = "Supporting Files";
			sourceTree = "<group>";
		};
		6AAC8FC219F048FE00E7A677 /* Core */ = {
			isa = PBXGroup;
			children = (
				6ACB15D11BC7F1D0006C029C /* Map.swift */,
				6AF148871D99A25B002BEA2C /* MapError.swift */,
				3BAD2C0B1BDDB10D00E6B203 /* Mappable.swift */,
				030114A81D95187600FBFD4F /* ImmutableMappable.swift */,
				6AAC8FC419F048FE00E7A677 /* Mapper.swift */,
				6AF148961D99A912002BEA2C /* Operators */,
				6AAC8FC319F048FE00E7A677 /* FromJSON.swift */,
				6AAC8FC719F048FE00E7A677 /* ToJSON.swift */,
			);
			name = Core;
			sourceTree = "<group>";
		};
		6AAC8FCA19F048FE00E7A677 /* Transforms */ = {
			isa = PBXGroup;
			children = (
				6A51372D1AADDEE400B82516 /* Date */,
				CD71C8C01A7218AD009D4161 /* TransformOf.swift */,
				CD50B6FC1A82518300744312 /* TransformType.swift */,
				6A6C54CF19FE8DB600239454 /* URLTransform.swift */,
				BC1E7F361ABC44C000F9B1CF /* EnumTransform.swift */,
				84D4F8511CC3B643008B0FB6 /* NSDecimalNumberTransform.swift */,
				997B4A461D3FA20D005E3F31 /* DictionaryTransform.swift */,
				C135CAB31D762F6900BA9338 /* DataTransform.swift */,
				79E591C61DAB7FED008E2EEF /* HexColorTransform.swift */,
				491D7998216FBA93006DB931 /* CodableTransform.swift */,
			);
			name = Transforms;
			sourceTree = "<group>";
		};
		6AF148961D99A912002BEA2C /* Operators */ = {
			isa = PBXGroup;
			children = (
				6AAC8FC519F048FE00E7A677 /* Operators.swift */,
				6AF148911D99A7CA002BEA2C /* EnumOperators.swift */,
				6AF1488C1D99A7A6002BEA2C /* TransformOperators.swift */,
				038F0A021E55FE2400613148 /* IntegerOperators.swift */,
			);
			name = Operators;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXHeadersBuildPhase section */
		6A05B7A31BE274BE00F19B53 /* Headers */ = {
			isa = PBXHeadersBuildPhase;
			buildActionMask = 2147483647;
			files = (
				6A05B7BD1BE274E800F19B53 /* ObjectMapper.h in Headers */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		6A2AD03A1B2C78540097E150 /* Headers */ = {
			isa = PBXHeadersBuildPhase;
			buildActionMask = 2147483647;
			files = (
				6AC458191BA350CF00054758 /* ObjectMapper.h in Headers */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		6AAC8F7319F03C2900E7A677 /* Headers */ = {
			isa = PBXHeadersBuildPhase;
			buildActionMask = 2147483647;
			files = (
				6AAC8F7C19F03C2900E7A677 /* ObjectMapper.h in Headers */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		CD1602FC1AC023D5000CD69A /* Headers */ = {
			isa = PBXHeadersBuildPhase;
			buildActionMask = 2147483647;
			files = (
				CD1603181AC02437000CD69A /* ObjectMapper.h in Headers */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		DBB9B41D2142A25100078E5A /* Headers */ = {
			isa = PBXHeadersBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXHeadersBuildPhase section */

/* Begin PBXNativeTarget section */
		6A05B7A51BE274BE00F19B53 /* ObjectMapper-tvOS */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 6A05B7BB1BE274BE00F19B53 /* Build configuration list for PBXNativeTarget "ObjectMapper-tvOS" */;
			buildPhases = (
				6A05B7A11BE274BE00F19B53 /* Sources */,
				6A05B7A21BE274BE00F19B53 /* Frameworks */,
				6A05B7A31BE274BE00F19B53 /* Headers */,
				6A05B7A41BE274BE00F19B53 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = "ObjectMapper-tvOS";
			productName = "ObjectMapper-tvOS";
			productReference = 6A05B7A61BE274BE00F19B53 /* ObjectMapper.framework */;
			productType = "com.apple.product-type.framework";
		};
		6A05B7AE1BE274BE00F19B53 /* ObjectMapper-tvOSTests */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 6A05B7BC1BE274BE00F19B53 /* Build configuration list for PBXNativeTarget "ObjectMapper-tvOSTests" */;
			buildPhases = (
				6A05B7AB1BE274BE00F19B53 /* Sources */,
				6A05B7AC1BE274BE00F19B53 /* Frameworks */,
				6A05B7AD1BE274BE00F19B53 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
				6A05B7B21BE274BE00F19B53 /* PBXTargetDependency */,
			);
			name = "ObjectMapper-tvOSTests";
			productName = "ObjectMapper-tvOSTests";
			productReference = 6A05B7AF1BE274BE00F19B53 /* ObjectMapper-tvOSTests.xctest */;
			productType = "com.apple.product-type.bundle.unit-test";
		};
		6A2AD03C1B2C78540097E150 /* ObjectMapper-watchOS */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 6A2AD0441B2C78540097E150 /* Build configuration list for PBXNativeTarget "ObjectMapper-watchOS" */;
			buildPhases = (
				6A2AD0381B2C78540097E150 /* Sources */,
				6A2AD0391B2C78540097E150 /* Frameworks */,
				6A2AD03A1B2C78540097E150 /* Headers */,
				6A2AD03B1B2C78540097E150 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = "ObjectMapper-watchOS";
			productName = "ObjectMapper-watchOS";
			productReference = 6A2AD03D1B2C78540097E150 /* ObjectMapper.framework */;
			productType = "com.apple.product-type.framework";
		};
		6AAC8F7519F03C2900E7A677 /* ObjectMapper-iOS */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 6AAC8F8919F03C2900E7A677 /* Build configuration list for PBXNativeTarget "ObjectMapper-iOS" */;
			buildPhases = (
				6AAC8F7119F03C2900E7A677 /* Sources */,
				6AAC8F7219F03C2900E7A677 /* Frameworks */,
				6AAC8F7319F03C2900E7A677 /* Headers */,
				6AAC8F7419F03C2900E7A677 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = "ObjectMapper-iOS";
			productName = ObjectMapper;
			productReference = 6AAC8F7619F03C2900E7A677 /* ObjectMapper.framework */;
			productType = "com.apple.product-type.framework";
		};
		6AAC8F8019F03C2900E7A677 /* ObjectMapper-iOSTests */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 6AAC8F8C19F03C2900E7A677 /* Build configuration list for PBXNativeTarget "ObjectMapper-iOSTests" */;
			buildPhases = (
				6AAC8F7D19F03C2900E7A677 /* Sources */,
				6AAC8F7E19F03C2900E7A677 /* Frameworks */,
				6AAC8F7F19F03C2900E7A677 /* Resources */,
				CD44374A1AAD696B00A271BA /* Copy Frameworks */,
			);
			buildRules = (
			);
			dependencies = (
				6AAC8FD619F04A5600E7A677 /* PBXTargetDependency */,
			);
			name = "ObjectMapper-iOSTests";
			productName = ObjectMapperTests;
			productReference = 6AAC8F8119F03C2900E7A677 /* ObjectMapper-iOSTests.xctest */;
			productType = "com.apple.product-type.bundle.unit-test";
		};
		CD1602FE1AC023D5000CD69A /* ObjectMapper-macOS */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = CD1603161AC023D6000CD69A /* Build configuration list for PBXNativeTarget "ObjectMapper-macOS" */;
			buildPhases = (
				CD1602FA1AC023D5000CD69A /* Sources */,
				CD1602FB1AC023D5000CD69A /* Frameworks */,
				CD1602FC1AC023D5000CD69A /* Headers */,
				CD1602FD1AC023D5000CD69A /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = "ObjectMapper-macOS";
			productName = "ObjectMapper-Mac";
			productReference = CD1602FF1AC023D5000CD69A /* ObjectMapper.framework */;
			productType = "com.apple.product-type.framework";
		};
		CD1603081AC023D6000CD69A /* ObjectMapper-macOSTests */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = CD1603171AC023D6000CD69A /* Build configuration list for PBXNativeTarget "ObjectMapper-macOSTests" */;
			buildPhases = (
				CD1603051AC023D6000CD69A /* Sources */,
				CD1603061AC023D6000CD69A /* Frameworks */,
				CD1603071AC023D6000CD69A /* Resources */,
				6AAE6A421ACED92700FBC899 /* CopyFiles */,
			);
			buildRules = (
			);
			dependencies = (
				CD16030C1AC023D6000CD69A /* PBXTargetDependency */,
			);
			name = "ObjectMapper-macOSTests";
			productName = "ObjectMapper-MacTests";
			productReference = CD1603091AC023D6000CD69A /* ObjectMapper-macOSTests.xctest */;
			productType = "com.apple.product-type.bundle.unit-test";
		};
		DBB9B41E2142A25100078E5A /* ObjectMapper-Mac-Static */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = DBB9B4222142A25100078E5A /* Build configuration list for PBXNativeTarget "ObjectMapper-Mac-Static" */;
			buildPhases = (
				DBB9B41B2142A25100078E5A /* Sources */,
				DBB9B41C2142A25100078E5A /* Frameworks */,
				DBB9B41D2142A25100078E5A /* Headers */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = "ObjectMapper-Mac-Static";
			productName = ObjectMapper;
			productReference = DBB9B41F2142A25100078E5A /* libObjectMapper.a */;
			productType = "com.apple.product-type.library.static";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		6AAC8F6D19F03C2900E7A677 /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastSwiftUpdateCheck = 0710;
				LastUpgradeCheck = 1020;
				ORGANIZATIONNAME = hearst;
				TargetAttributes = {
					6A05B7A51BE274BE00F19B53 = {
						CreatedOnToolsVersion = 7.1;
						LastSwiftMigration = 1010;
					};
					6A05B7AE1BE274BE00F19B53 = {
						CreatedOnToolsVersion = 7.1;
						LastSwiftMigration = 1010;
						ProvisioningStyle = Manual;
					};
					6A2AD03C1B2C78540097E150 = {
						CreatedOnToolsVersion = 7.0;
						LastSwiftMigration = 1010;
					};
					6AAC8F7519F03C2900E7A677 = {
						CreatedOnToolsVersion = 6.0.1;
						LastSwiftMigration = 0900;
					};
					6AAC8F8019F03C2900E7A677 = {
						CreatedOnToolsVersion = 6.0.1;
						LastSwiftMigration = 0900;
					};
					CD1602FE1AC023D5000CD69A = {
						CreatedOnToolsVersion = 6.2;
						LastSwiftMigration = 1010;
					};
					CD1603081AC023D6000CD69A = {
						CreatedOnToolsVersion = 6.2;
						LastSwiftMigration = 1010;
					};
					DBB9B41E2142A25100078E5A = {
						CreatedOnToolsVersion = 9.4.1;
						LastSwiftMigration = 1010;
						ProvisioningStyle = Automatic;
					};
				};
			};
			buildConfigurationList = 6AAC8F7019F03C2900E7A677 /* Build configuration list for PBXProject "ObjectMapper" */;
			compatibilityVersion = "Xcode 3.2";
			developmentRegion = English;
			hasScannedForEncodings = 0;
			knownRegions = (
				English,
				en,
			);
			mainGroup = 6AAC8F6C19F03C2900E7A677;
			productRefGroup = 6AAC8F7719F03C2900E7A677 /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				6AAC8F7519F03C2900E7A677 /* ObjectMapper-iOS */,
				CD1602FE1AC023D5000CD69A /* ObjectMapper-macOS */,
				6A2AD03C1B2C78540097E150 /* ObjectMapper-watchOS */,
				6A05B7A51BE274BE00F19B53 /* ObjectMapper-tvOS */,
				6AAC8F8019F03C2900E7A677 /* ObjectMapper-iOSTests */,
				CD1603081AC023D6000CD69A /* ObjectMapper-macOSTests */,
				6A05B7AE1BE274BE00F19B53 /* ObjectMapper-tvOSTests */,
				DBB9B41E2142A25100078E5A /* ObjectMapper-Mac-Static */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		6A05B7A41BE274BE00F19B53 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		6A05B7AD1BE274BE00F19B53 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		6A2AD03B1B2C78540097E150 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		6AAC8F7419F03C2900E7A677 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		6AAC8F7F19F03C2900E7A677 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		CD1602FD1AC023D5000CD69A /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		CD1603071AC023D6000CD69A /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		6A05B7A11BE274BE00F19B53 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				030E75F71E588BFC0027D94A /* IntegerOperators.swift in Sources */,
				6AA1F66E1BE991FF006EF513 /* Mappable.swift in Sources */,
				6AC692341BE3FD3A004C119A /* Map.swift in Sources */,
				6AF148901D99A7A6002BEA2C /* TransformOperators.swift in Sources */,
				6AC692351BE3FD3A004C119A /* Mapper.swift in Sources */,
				6AC692361BE3FD3A004C119A /* Operators.swift in Sources */,
				84D4F8551CC3B643008B0FB6 /* NSDecimalNumberTransform.swift in Sources */,
				6AC692371BE3FD3A004C119A /* FromJSON.swift in Sources */,
				6AF148951D99A7CA002BEA2C /* EnumOperators.swift in Sources */,
				997B4A4A1D3FA20D005E3F31 /* DictionaryTransform.swift in Sources */,
				6AC692381BE3FD3A004C119A /* ToJSON.swift in Sources */,
				6AC692391BE3FD3A004C119A /* DateTransform.swift in Sources */,
				6AC6923A1BE3FD3A004C119A /* DateFormatterTransform.swift in Sources */,
				6AC6923B1BE3FD3A004C119A /* ISO8601DateTransform.swift in Sources */,
				6AC6923C1BE3FD3A004C119A /* CustomDateFormatTransform.swift in Sources */,
				491D799F216FBA9B006DB931 /* CodableTransform.swift in Sources */,
				6AC6923D1BE3FD3A004C119A /* TransformOf.swift in Sources */,
				6AC6923E1BE3FD3A004C119A /* TransformType.swift in Sources */,
				6AC6923F1BE3FD3A004C119A /* URLTransform.swift in Sources */,
				6AC692401BE3FD3A004C119A /* EnumTransform.swift in Sources */,
				797FEDD01DAB856000E31F75 /* HexColorTransform.swift in Sources */,
				6AF1488B1D99A25B002BEA2C /* MapError.swift in Sources */,
				C135CABC1D7631DC00BA9338 /* DataTransform.swift in Sources */,
				030114B11D951A7500FBFD4F /* ImmutableMappable.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		6A05B7AB1BE274BE00F19B53 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				6AA1F66F1BE9921C006EF513 /* MappableExtensionsTests.swift in Sources */,
				891804CF1C122AF000E5C3EE /* MappableTypesWithTransformsTests.swift in Sources */,
				6AF148861D999E31002BEA2C /* GenericObjectsTests.swift in Sources */,
				C135CAB91D76303E00BA9338 /* DataTransformTests.swift in Sources */,
				6A442CA31CE251F100AB4F1F /* MapContextTests.swift in Sources */,
				6AA1F66B1BE94687006EF513 /* ClassClusterTests.swift in Sources */,
				6AECC9E81D79E29100222E7A /* DictionaryTransformTests.swift in Sources */,
				6AA1F66C1BE94687006EF513 /* PerformanceTests.swift in Sources */,
				491D7997216FB8B2006DB931 /* CodableTests.swift in Sources */,
				6AC692411BE3FD45004C119A /* BasicTypes.swift in Sources */,
				BA9D143D246BF0940037233E /* URLTransformTests.swift in Sources */,
				6A0BF2011C0B53470083D1AF /* ToObjectTests.swift in Sources */,
				84D4F8591CC3B71B008B0FB6 /* NSDecimalNumberTransformTests.swift in Sources */,
				6AC692421BE3FD45004C119A /* BasicTypesTestsFromJSON.swift in Sources */,
				6A715C4C1D05B1FA0054AD62 /* IgnoreNilTests.swift in Sources */,
				6AC692431BE3FD45004C119A /* BasicTypesTestsToJSON.swift in Sources */,
				6AC692441BE3FD45004C119A /* CustomTransformTests.swift in Sources */,
				6AC692451BE3FD45004C119A /* NestedKeysTests.swift in Sources */,
				6AC692461BE3FD45004C119A /* NestedArrayTests.swift in Sources */,
				DC99C8CE1CA261AE005C788C /* NullableKeysFromJSONTests.swift in Sources */,
				6AC692471BE3FD45004C119A /* ObjectMapperTests.swift in Sources */,
				030114AE1D951A5600FBFD4F /* ImmutableTests.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		6A2AD0381B2C78540097E150 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				030E75F61E588BF80027D94A /* IntegerOperators.swift in Sources */,
				6A2AD0451B2C786C0097E150 /* Mapper.swift in Sources */,
				3BAD2C0E1BDDB10D00E6B203 /* Mappable.swift in Sources */,
				6AF1488F1D99A7A6002BEA2C /* TransformOperators.swift in Sources */,
				6A2AD0461B2C786C0097E150 /* Operators.swift in Sources */,
				6ACB15D41BC7F1D0006C029C /* Map.swift in Sources */,
				84D4F8541CC3B643008B0FB6 /* NSDecimalNumberTransform.swift in Sources */,
				6A2AD0471B2C786C0097E150 /* FromJSON.swift in Sources */,
				6AF148941D99A7CA002BEA2C /* EnumOperators.swift in Sources */,
				997B4A491D3FA20D005E3F31 /* DictionaryTransform.swift in Sources */,
				6A2AD0481B2C786C0097E150 /* ToJSON.swift in Sources */,
				6A2AD0491B2C786C0097E150 /* DateTransform.swift in Sources */,
				6A2AD04A1B2C786C0097E150 /* DateFormatterTransform.swift in Sources */,
				6A2AD04B1B2C786C0097E150 /* ISO8601DateTransform.swift in Sources */,
				6A2AD04C1B2C786C0097E150 /* CustomDateFormatTransform.swift in Sources */,
				491D799E216FBA9B006DB931 /* CodableTransform.swift in Sources */,
				6A2AD04D1B2C786C0097E150 /* TransformOf.swift in Sources */,
				6A2AD04E1B2C786C0097E150 /* TransformType.swift in Sources */,
				6A2AD04F1B2C786C0097E150 /* URLTransform.swift in Sources */,
				6A2AD0501B2C786C0097E150 /* EnumTransform.swift in Sources */,
				797FEDCF1DAB855F00E31F75 /* HexColorTransform.swift in Sources */,
				6AF1488A1D99A25B002BEA2C /* MapError.swift in Sources */,
				C135CABB1D7631DB00BA9338 /* DataTransform.swift in Sources */,
				030114B01D951A7100FBFD4F /* ImmutableMappable.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		6AAC8F7119F03C2900E7A677 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				6AC53CAB1F031B85008BDDCD /* ImmutableMappable.swift in Sources */,
				37AFD9B91AAD191C00AB59B5 /* CustomDateFormatTransform.swift in Sources */,
				3BAD2C0C1BDDB10D00E6B203 /* Mappable.swift in Sources */,
				6AF1488D1D99A7A6002BEA2C /* TransformOperators.swift in Sources */,
				CD50B6FD1A82518300744312 /* TransformType.swift in Sources */,
				6ACB15D21BC7F1D0006C029C /* Map.swift in Sources */,
				84D4F8521CC3B643008B0FB6 /* NSDecimalNumberTransform.swift in Sources */,
				6AAC8FD319F048FE00E7A677 /* DateTransform.swift in Sources */,
				6AF148921D99A7CA002BEA2C /* EnumOperators.swift in Sources */,
				997B4A471D3FA20D005E3F31 /* DictionaryTransform.swift in Sources */,
				BC1E7F371ABC44C000F9B1CF /* EnumTransform.swift in Sources */,
				D86BDEA41A51E5AD00120819 /* ISO8601DateTransform.swift in Sources */,
				CD71C8C11A7218AD009D4161 /* TransformOf.swift in Sources */,
				6A6C54D019FE8DB600239454 /* URLTransform.swift in Sources */,
				038F0A031E55FE2400613148 /* IntegerOperators.swift in Sources */,
				491D799C216FBA9A006DB931 /* CodableTransform.swift in Sources */,
				6A51372C1AADDE2700B82516 /* DateFormatterTransform.swift in Sources */,
				6AAC8FCE19F048FE00E7A677 /* Mapper.swift in Sources */,
				6AAC8FCD19F048FE00E7A677 /* FromJSON.swift in Sources */,
				6AAC8FD119F048FE00E7A677 /* ToJSON.swift in Sources */,
				79E591C71DAB7FED008E2EEF /* HexColorTransform.swift in Sources */,
				6AF148881D99A25B002BEA2C /* MapError.swift in Sources */,
				C135CAB41D762F6900BA9338 /* DataTransform.swift in Sources */,
				6AAC8FCF19F048FE00E7A677 /* Operators.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		6AAC8F7D19F03C2900E7A677 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				3BAD2C101BDDC0B000E6B203 /* MappableExtensionsTests.swift in Sources */,
				891804CD1C122AF000E5C3EE /* MappableTypesWithTransformsTests.swift in Sources */,
				6AF148841D999E31002BEA2C /* GenericObjectsTests.swift in Sources */,
				C135CAB71D76303E00BA9338 /* DataTransformTests.swift in Sources */,
				6A442CA11CE251F100AB4F1F /* MapContextTests.swift in Sources */,
				6A6AEB961A93874F002573D3 /* BasicTypesTestsFromJSON.swift in Sources */,
				1865416F1E972FA800F95A19 /* URLTransformTests.swift in Sources */,
				6AECC9E61D79E29100222E7A /* DictionaryTransformTests.swift in Sources */,
				6A0BF1FF1C0B53470083D1AF /* ToObjectTests.swift in Sources */,
				CD44374D1AAE9C1100A271BA /* NestedKeysTests.swift in Sources */,
				491D7995216FB8B2006DB931 /* CodableTests.swift in Sources */,
				6A3774341A31427F00CC0AB5 /* BasicTypesTestsToJSON.swift in Sources */,
				84D4F8571CC3B71B008B0FB6 /* NSDecimalNumberTransformTests.swift in Sources */,
				6A412A171BAC770C001C3F67 /* ClassClusterTests.swift in Sources */,
				6A715C4A1D05B1FA0054AD62 /* IgnoreNilTests.swift in Sources */,
				6A51372F1AADE12C00B82516 /* CustomTransformTests.swift in Sources */,
				6A6AEB981A9387D0002573D3 /* BasicTypes.swift in Sources */,
				6A412A241BB0DA26001C3F67 /* PerformanceTests.swift in Sources */,
				6AAC8F8619F03C2900E7A677 /* ObjectMapperTests.swift in Sources */,
				DC99C8CC1CA261A8005C788C /* NullableKeysFromJSONTests.swift in Sources */,
				6100B1C01BD76A030011114A /* NestedArrayTests.swift in Sources */,
				6AC53CAC1F03FA1B008BDDCD /* ImmutableTests.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		CD1602FA1AC023D5000CD69A /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				030E75F51E588BF30027D94A /* IntegerOperators.swift in Sources */,
				CD1603221AC02472000CD69A /* TransformType.swift in Sources */,
				3BAD2C0D1BDDB10D00E6B203 /* Mappable.swift in Sources */,
				6AF1488E1D99A7A6002BEA2C /* TransformOperators.swift in Sources */,
				030114AF1D951A6C00FBFD4F /* ImmutableMappable.swift in Sources */,
				CD1603201AC02461000CD69A /* CustomDateFormatTransform.swift in Sources */,
				CD16031E1AC02461000CD69A /* DateFormatterTransform.swift in Sources */,
				84D4F8531CC3B643008B0FB6 /* NSDecimalNumberTransform.swift in Sources */,
				6AF148931D99A7CA002BEA2C /* EnumOperators.swift in Sources */,
				6ACB15D31BC7F1D0006C029C /* Map.swift in Sources */,
				997B4A481D3FA20D005E3F31 /* DictionaryTransform.swift in Sources */,
				CD1603241AC02472000CD69A /* EnumTransform.swift in Sources */,
				CD16031F1AC02461000CD69A /* ISO8601DateTransform.swift in Sources */,
				CD1603211AC02472000CD69A /* TransformOf.swift in Sources */,
				CD1603231AC02472000CD69A /* URLTransform.swift in Sources */,
				491D799D216FBA9A006DB931 /* CodableTransform.swift in Sources */,
				CD16031C1AC02451000CD69A /* ToJSON.swift in Sources */,
				CD16031D1AC02461000CD69A /* DateTransform.swift in Sources */,
				CD1603191AC02451000CD69A /* Mapper.swift in Sources */,
				CD16031A1AC02451000CD69A /* Operators.swift in Sources */,
				797FEDCE1DAB855F00E31F75 /* HexColorTransform.swift in Sources */,
				6AF148891D99A25B002BEA2C /* MapError.swift in Sources */,
				CD16031B1AC02451000CD69A /* FromJSON.swift in Sources */,
				C135CABA1D7631DB00BA9338 /* DataTransform.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		CD1603051AC023D6000CD69A /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				3BAD2C111BDDC0B000E6B203 /* MappableExtensionsTests.swift in Sources */,
				891804CE1C122AF000E5C3EE /* MappableTypesWithTransformsTests.swift in Sources */,
				6AF148851D999E31002BEA2C /* GenericObjectsTests.swift in Sources */,
				C135CAB81D76303E00BA9338 /* DataTransformTests.swift in Sources */,
				6A442CA21CE251F100AB4F1F /* MapContextTests.swift in Sources */,
				6AA1F66D1BE9468D006EF513 /* NestedArrayTests.swift in Sources */,
				6AECC9E71D79E29100222E7A /* DictionaryTransformTests.swift in Sources */,
				6A412A181BAC830B001C3F67 /* ClassClusterTests.swift in Sources */,
				491D7996216FB8B2006DB931 /* CodableTests.swift in Sources */,
				CD1603261AC02480000CD69A /* BasicTypesTestsFromJSON.swift in Sources */,
				BA9D143C246BF0930037233E /* URLTransformTests.swift in Sources */,
				6A0BF2001C0B53470083D1AF /* ToObjectTests.swift in Sources */,
				84D4F8581CC3B71B008B0FB6 /* NSDecimalNumberTransformTests.swift in Sources */,
				CD1603291AC02480000CD69A /* NestedKeysTests.swift in Sources */,
				6A715C4B1D05B1FA0054AD62 /* IgnoreNilTests.swift in Sources */,
				CD1603251AC02480000CD69A /* BasicTypes.swift in Sources */,
				CD16032A1AC02480000CD69A /* ObjectMapperTests.swift in Sources */,
				CD1603271AC02480000CD69A /* BasicTypesTestsToJSON.swift in Sources */,
				6A412A251BB0DA26001C3F67 /* PerformanceTests.swift in Sources */,
				DC99C8CD1CA261AD005C788C /* NullableKeysFromJSONTests.swift in Sources */,
				CD1603281AC02480000CD69A /* CustomTransformTests.swift in Sources */,
				030114AD1D951A5300FBFD4F /* ImmutableTests.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		DBB9B41B2142A25100078E5A /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				DBB9B4332142A2ED00078E5A /* DictionaryTransform.swift in Sources */,
				DBB9B4312142A2ED00078E5A /* EnumTransform.swift in Sources */,
				DBB9B4292142A2E600078E5A /* EnumOperators.swift in Sources */,
				DBB9B42B2142A2E600078E5A /* IntegerOperators.swift in Sources */,
				DBB9B4302142A2ED00078E5A /* URLTransform.swift in Sources */,
				DBB9B4262142A2E100078E5A /* ImmutableMappable.swift in Sources */,
				DBB9B42F2142A2ED00078E5A /* TransformType.swift in Sources */,
				DBB9B42D2142A2E600078E5A /* ToJSON.swift in Sources */,
				DBB9B4232142A2D800078E5A /* Map.swift in Sources */,
				DBB9B4252142A2E100078E5A /* Mappable.swift in Sources */,
				DBB9B42C2142A2E600078E5A /* FromJSON.swift in Sources */,
				DBB9B4372142A2F200078E5A /* DateFormatterTransform.swift in Sources */,
				DBB9B4242142A2E100078E5A /* MapError.swift in Sources */,
				DBB9B4392142A2F200078E5A /* CustomDateFormatTransform.swift in Sources */,
				DBB9B4272142A2E100078E5A /* Mapper.swift in Sources */,
				DBB9B42E2142A2ED00078E5A /* TransformOf.swift in Sources */,
				DBB9B4352142A2ED00078E5A /* HexColorTransform.swift in Sources */,
				DBB9B42A2142A2E600078E5A /* TransformOperators.swift in Sources */,
				DBB9B4382142A2F200078E5A /* ISO8601DateTransform.swift in Sources */,
				DBB9B4362142A2F200078E5A /* DateTransform.swift in Sources */,
				DBB9B4322142A2ED00078E5A /* NSDecimalNumberTransform.swift in Sources */,
				DBB9B4342142A2ED00078E5A /* DataTransform.swift in Sources */,
				DBB9B4282142A2E600078E5A /* Operators.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin PBXTargetDependency section */
		6A05B7B21BE274BE00F19B53 /* PBXTargetDependency */ = {
			isa = PBXTargetDependency;
			target = 6A05B7A51BE274BE00F19B53 /* ObjectMapper-tvOS */;
			targetProxy = 6A05B7B11BE274BE00F19B53 /* PBXContainerItemProxy */;
		};
		6AAC8FD619F04A5600E7A677 /* PBXTargetDependency */ = {
			isa = PBXTargetDependency;
			target = 6AAC8F7519F03C2900E7A677 /* ObjectMapper-iOS */;
			targetProxy = 6AAC8FD519F04A5600E7A677 /* PBXContainerItemProxy */;
		};
		CD16030C1AC023D6000CD69A /* PBXTargetDependency */ = {
			isa = PBXTargetDependency;
			target = CD1602FE1AC023D5000CD69A /* ObjectMapper-macOS */;
			targetProxy = CD16030B1AC023D6000CD69A /* PBXContainerItemProxy */;
		};
/* End PBXTargetDependency section */

/* Begin XCBuildConfiguration section */
		6A05B7B71BE274BE00F19B53 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				APPLICATION_EXTENSION_API_ONLY = YES;
				BITCODE_GENERATION_MODE = marker;
				CODE_SIGN_IDENTITY = "";
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				DEBUG_INFORMATION_FORMAT = dwarf;
				DEFINES_MODULE = YES;
				DYLIB_COMPATIBILITY_VERSION = 1;
				DYLIB_CURRENT_VERSION = 1;
				DYLIB_INSTALL_NAME_BASE = "@rpath";
				ENABLE_BITCODE = YES;
				GCC_NO_COMMON_BLOCKS = YES;
				INFOPLIST_FILE = Sources/Info.plist;
				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = "com.tristanhimmelman.$(PRODUCT_NAME:rfc1034identifier)";
				PRODUCT_NAME = "$(PROJECT_NAME)";
				SDKROOT = appletvos;
				SKIP_INSTALL = YES;
				SWIFT_VERSION = 4.2;
				TARGETED_DEVICE_FAMILY = 3;
				TVOS_DEPLOYMENT_TARGET = 9.0;
				WATCHOS_DEPLOYMENT_TARGET = 2.0;
			};
			name = Debug;
		};
		6A05B7B81BE274BE00F19B53 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				APPLICATION_EXTENSION_API_ONLY = YES;
				BITCODE_GENERATION_MODE = bitcode;
				CODE_SIGN_IDENTITY = "";
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				DEFINES_MODULE = YES;
				DYLIB_COMPATIBILITY_VERSION = 1;
				DYLIB_CURRENT_VERSION = 1;
				DYLIB_INSTALL_NAME_BASE = "@rpath";
				ENABLE_BITCODE = YES;
				GCC_NO_COMMON_BLOCKS = YES;
				INFOPLIST_FILE = Sources/Info.plist;
				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = "com.tristanhimmelman.$(PRODUCT_NAME:rfc1034identifier)";
				PRODUCT_NAME = "$(PROJECT_NAME)";
				SDKROOT = appletvos;
				SKIP_INSTALL = YES;
				SWIFT_VERSION = 4.2;
				TARGETED_DEVICE_FAMILY = 3;
				TVOS_DEPLOYMENT_TARGET = 9.0;
				WATCHOS_DEPLOYMENT_TARGET = 2.0;
			};
			name = Release;
		};
		6A05B7B91BE274BE00F19B53 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				CODE_SIGN_IDENTITY = "";
				DEBUG_INFORMATION_FORMAT = dwarf;
				DEVELOPMENT_TEAM = "";
				GCC_NO_COMMON_BLOCKS = YES;
				INFOPLIST_FILE = Tests/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = "com.tristanhimmelman.ObjectMapper-tvOSTests";
				PRODUCT_NAME = "$(TARGET_NAME)";
				SDKROOT = appletvos;
				SWIFT_VERSION = 4.2;
				TVOS_DEPLOYMENT_TARGET = 9.0;
			};
			name = Debug;
		};
		6A05B7BA1BE274BE00F19B53 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				CODE_SIGN_IDENTITY = "";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				DEVELOPMENT_TEAM = "";
				GCC_NO_COMMON_BLOCKS = YES;
				INFOPLIST_FILE = Tests/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = "com.tristanhimmelman.ObjectMapper-tvOSTests";
				PRODUCT_NAME = "$(TARGET_NAME)";
				SDKROOT = appletvos;
				SWIFT_VERSION = 4.2;
				TVOS_DEPLOYMENT_TARGET = 9.0;
			};
			name = Release;
		};
		6A2AD0421B2C78540097E150 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				APPLICATION_EXTENSION_API_ONLY = YES;
				BITCODE_GENERATION_MODE = marker;
				CODE_SIGN_IDENTITY = "";
				DEBUG_INFORMATION_FORMAT = dwarf;
				DEFINES_MODULE = YES;
				DYLIB_COMPATIBILITY_VERSION = 1;
				DYLIB_CURRENT_VERSION = 1;
				DYLIB_INSTALL_NAME_BASE = "@rpath";
				ENABLE_BITCODE = YES;
				ENABLE_TESTABILITY = YES;
				GCC_NO_COMMON_BLOCKS = YES;
				INFOPLIST_FILE = Sources/Info.plist;
				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = "com.tristanhimmelman.$(PRODUCT_NAME:rfc1034identifier)";
				PRODUCT_NAME = "$(PROJECT_NAME)";
				SDKROOT = watchos;
				SKIP_INSTALL = YES;
				SWIFT_VERSION = 4.2;
				TARGETED_DEVICE_FAMILY = 4;
				TVOS_DEPLOYMENT_TARGET = 9.0;
				WATCHOS_DEPLOYMENT_TARGET = 2.0;
			};
			name = Debug;
		};
		6A2AD0431B2C78540097E150 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				APPLICATION_EXTENSION_API_ONLY = YES;
				BITCODE_GENERATION_MODE = bitcode;
				CODE_SIGN_IDENTITY = "";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				DEFINES_MODULE = YES;
				DYLIB_COMPATIBILITY_VERSION = 1;
				DYLIB_CURRENT_VERSION = 1;
				DYLIB_INSTALL_NAME_BASE = "@rpath";
				ENABLE_BITCODE = YES;
				GCC_NO_COMMON_BLOCKS = YES;
				INFOPLIST_FILE = Sources/Info.plist;
				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = "com.tristanhimmelman.$(PRODUCT_NAME:rfc1034identifier)";
				PRODUCT_NAME = "$(PROJECT_NAME)";
				SDKROOT = watchos;
				SKIP_INSTALL = YES;
				SWIFT_VERSION = 4.2;
				TARGETED_DEVICE_FAMILY = 4;
				TVOS_DEPLOYMENT_TARGET = 9.0;
				WATCHOS_DEPLOYMENT_TARGET = 2.0;
			};
			name = Release;
		};
		6AAC8F8719F03C2900E7A677 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				COPY_PHASE_STRIP = NO;
				CURRENT_PROJECT_VERSION = 1;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
				MACOSX_DEPLOYMENT_TARGET = 10.9;
				MTL_ENABLE_DEBUG_INFO = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = iphoneos;
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				VERSIONING_SYSTEM = "apple-generic";
				VERSION_INFO_PREFIX = "";
			};
			name = Debug;
		};
		6AAC8F8819F03C2900E7A677 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				COPY_PHASE_STRIP = YES;
				CURRENT_PROJECT_VERSION = 1;
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
				MACOSX_DEPLOYMENT_TARGET = 10.9;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = iphoneos;
				SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				VALIDATE_PRODUCT = YES;
				VERSIONING_SYSTEM = "apple-generic";
				VERSION_INFO_PREFIX = "";
			};
			name = Release;
		};
		6AAC8F8A19F03C2900E7A677 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				APPLICATION_EXTENSION_API_ONLY = YES;
				BITCODE_GENERATION_MODE = marker;
				DEFINES_MODULE = YES;
				DYLIB_COMPATIBILITY_VERSION = 1;
				DYLIB_CURRENT_VERSION = 1;
				DYLIB_INSTALL_NAME_BASE = "@rpath";
				INFOPLIST_FILE = Sources/Info.plist;
				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = "com.tristanhimmelman.$(PRODUCT_NAME:rfc1034identifier)";
				PRODUCT_NAME = "$(PROJECT_NAME)";
				SKIP_INSTALL = YES;
				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
				SWIFT_VERSION = 4.2;
				TVOS_DEPLOYMENT_TARGET = 9.0;
				WATCHOS_DEPLOYMENT_TARGET = 2.0;
			};
			name = Debug;
		};
		6AAC8F8B19F03C2900E7A677 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				APPLICATION_EXTENSION_API_ONLY = YES;
				BITCODE_GENERATION_MODE = bitcode;
				DEFINES_MODULE = YES;
				DYLIB_COMPATIBILITY_VERSION = 1;
				DYLIB_CURRENT_VERSION = 1;
				DYLIB_INSTALL_NAME_BASE = "@rpath";
				INFOPLIST_FILE = Sources/Info.plist;
				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = "com.tristanhimmelman.$(PRODUCT_NAME:rfc1034identifier)";
				PRODUCT_NAME = "$(PROJECT_NAME)";
				SKIP_INSTALL = YES;
				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
				SWIFT_VERSION = 4.2;
				TVOS_DEPLOYMENT_TARGET = 9.0;
				WATCHOS_DEPLOYMENT_TARGET = 2.0;
			};
			name = Release;
		};
		6AAC8F8D19F03C2900E7A677 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				INFOPLIST_FILE = Tests/Info.plist;
				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = "com.heart.$(PRODUCT_NAME:rfc1034identifier)";
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
				SWIFT_VERSION = 4.0;
			};
			name = Debug;
		};
		6AAC8F8E19F03C2900E7A677 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
				INFOPLIST_FILE = Tests/Info.plist;
				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = "com.heart.$(PRODUCT_NAME:rfc1034identifier)";
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
				SWIFT_VERSION = 4.0;
			};
			name = Release;
		};
		CD1603121AC023D6000CD69A /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				APPLICATION_EXTENSION_API_ONLY = YES;
				BITCODE_GENERATION_MODE = marker;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Mac Developer";
				COMBINE_HIDPI_IMAGES = YES;
				DEFINES_MODULE = YES;
				DYLIB_COMPATIBILITY_VERSION = 1;
				DYLIB_CURRENT_VERSION = 1;
				DYLIB_INSTALL_NAME_BASE = "@rpath";
				FRAMEWORK_VERSION = A;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				INFOPLIST_FILE = Sources/Info.plist;
				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
				MACOSX_DEPLOYMENT_TARGET = 12.0;
				PRODUCT_BUNDLE_IDENTIFIER = "com.tristanhimmelman.$(PRODUCT_NAME:rfc1034identifier)";
				PRODUCT_NAME = "$(PROJECT_NAME)";
				SDKROOT = macosx;
				SKIP_INSTALL = YES;
				SWIFT_VERSION = 4.2;
				TVOS_DEPLOYMENT_TARGET = 9.0;
				WATCHOS_DEPLOYMENT_TARGET = 2.0;
			};
			name = Debug;
		};
		CD1603131AC023D6000CD69A /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				APPLICATION_EXTENSION_API_ONLY = YES;
				BITCODE_GENERATION_MODE = bitcode;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "3rd Party Mac Developer Application";
				COMBINE_HIDPI_IMAGES = YES;
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				DEFINES_MODULE = YES;
				DYLIB_COMPATIBILITY_VERSION = 1;
				DYLIB_CURRENT_VERSION = 1;
				DYLIB_INSTALL_NAME_BASE = "@rpath";
				FRAMEWORK_VERSION = A;
				INFOPLIST_FILE = Sources/Info.plist;
				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
				MACOSX_DEPLOYMENT_TARGET = 12.0;
				PRODUCT_BUNDLE_IDENTIFIER = "com.tristanhimmelman.$(PRODUCT_NAME:rfc1034identifier)";
				PRODUCT_NAME = "$(PROJECT_NAME)";
				SDKROOT = macosx;
				SKIP_INSTALL = YES;
				SWIFT_VERSION = 4.2;
				TVOS_DEPLOYMENT_TARGET = 9.0;
				WATCHOS_DEPLOYMENT_TARGET = 2.0;
			};
			name = Release;
		};
		CD1603141AC023D6000CD69A /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				COMBINE_HIDPI_IMAGES = YES;
				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				INFOPLIST_FILE = Tests/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
				MACOSX_DEPLOYMENT_TARGET = 12.0;
				PRODUCT_BUNDLE_IDENTIFIER = "com.heart.$(PRODUCT_NAME:rfc1034identifier)";
				PRODUCT_NAME = "$(TARGET_NAME)";
				SDKROOT = macosx;
				SWIFT_VERSION = 4.2;
			};
			name = Debug;
		};
		CD1603151AC023D6000CD69A /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				COMBINE_HIDPI_IMAGES = YES;
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
				INFOPLIST_FILE = Tests/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
				MACOSX_DEPLOYMENT_TARGET = 12.0;
				PRODUCT_BUNDLE_IDENTIFIER = "com.heart.$(PRODUCT_NAME:rfc1034identifier)";
				PRODUCT_NAME = "$(TARGET_NAME)";
				SDKROOT = macosx;
				SWIFT_VERSION = 4.2;
			};
			name = Release;
		};
		DBB9B4202142A25100078E5A /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
				CLANG_ENABLE_OBJC_WEAK = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
				CODE_SIGN_IDENTITY = "-";
				CODE_SIGN_STYLE = Automatic;
				DEBUG_INFORMATION_FORMAT = dwarf;
				EXECUTABLE_PREFIX = lib;
				GCC_C_LANGUAGE_STANDARD = gnu11;
				MACOSX_DEPLOYMENT_TARGET = 10.13;
				PRODUCT_NAME = ObjectMapper;
				SDKROOT = macosx;
				SKIP_INSTALL = YES;
				SWIFT_VERSION = 4.2;
			};
			name = Debug;
		};
		DBB9B4212142A25100078E5A /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
				CLANG_ENABLE_OBJC_WEAK = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
				CODE_SIGN_IDENTITY = "-";
				CODE_SIGN_STYLE = Automatic;
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				EXECUTABLE_PREFIX = lib;
				GCC_C_LANGUAGE_STANDARD = gnu11;
				MACOSX_DEPLOYMENT_TARGET = 10.13;
				PRODUCT_NAME = ObjectMapper;
				SDKROOT = macosx;
				SKIP_INSTALL = YES;
				SWIFT_VERSION = 4.2;
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		6A05B7BB1BE274BE00F19B53 /* Build configuration list for PBXNativeTarget "ObjectMapper-tvOS" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				6A05B7B71BE274BE00F19B53 /* Debug */,
				6A05B7B81BE274BE00F19B53 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		6A05B7BC1BE274BE00F19B53 /* Build configuration list for PBXNativeTarget "ObjectMapper-tvOSTests" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				6A05B7B91BE274BE00F19B53 /* Debug */,
				6A05B7BA1BE274BE00F19B53 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		6A2AD0441B2C78540097E150 /* Build configuration list for PBXNativeTarget "ObjectMapper-watchOS" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				6A2AD0421B2C78540097E150 /* Debug */,
				6A2AD0431B2C78540097E150 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		6AAC8F7019F03C2900E7A677 /* Build configuration list for PBXProject "ObjectMapper" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				6AAC8F8719F03C2900E7A677 /* Debug */,
				6AAC8F8819F03C2900E7A677 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		6AAC8F8919F03C2900E7A677 /* Build configuration list for PBXNativeTarget "ObjectMapper-iOS" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				6AAC8F8A19F03C2900E7A677 /* Debug */,
				6AAC8F8B19F03C2900E7A677 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		6AAC8F8C19F03C2900E7A677 /* Build configuration list for PBXNativeTarget "ObjectMapper-iOSTests" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				6AAC8F8D19F03C2900E7A677 /* Debug */,
				6AAC8F8E19F03C2900E7A677 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		CD1603161AC023D6000CD69A /* Build configuration list for PBXNativeTarget "ObjectMapper-macOS" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				CD1603121AC023D6000CD69A /* Debug */,
				CD1603131AC023D6000CD69A /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		CD1603171AC023D6000CD69A /* Build configuration list for PBXNativeTarget "ObjectMapper-macOSTests" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				CD1603141AC023D6000CD69A /* Debug */,
				CD1603151AC023D6000CD69A /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		DBB9B4222142A25100078E5A /* Build configuration list for PBXNativeTarget "ObjectMapper-Mac-Static" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				DBB9B4202142A25100078E5A /* Debug */,
				DBB9B4212142A25100078E5A /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 6AAC8F6D19F03C2900E7A677 /* Project object */;
}


================================================
FILE: ObjectMapper.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "self:ObjectMapper.xcodeproj">
   </FileRef>
</Workspace>


================================================
FILE: ObjectMapper.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IDEDidComputeMac32BitWarning</key>
	<true/>
</dict>
</plist>


================================================
FILE: ObjectMapper.xcodeproj/xcshareddata/xcschemes/ObjectMapper-Mac.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "1020"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "CD1602FE1AC023D5000CD69A"
               BuildableName = "ObjectMapper.framework"
               BlueprintName = "ObjectMapper-macOS"
               ReferencedContainer = "container:ObjectMapper.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "NO"
            buildForProfiling = "NO"
            buildForArchiving = "NO"
            buildForAnalyzing = "NO">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "CD1603081AC023D6000CD69A"
               BuildableName = "ObjectMapper-macOSTests.xctest"
               BlueprintName = "ObjectMapper-macOSTests"
               ReferencedContainer = "container:ObjectMapper.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
      </BuildActionEntries>
   </BuildAction>
   <TestAction
      buildConfiguration = "Release"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      shouldUseLaunchSchemeArgsEnv = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "CD1602FE1AC023D5000CD69A"
            BuildableName = "ObjectMapper.framework"
            BlueprintName = "ObjectMapper-macOS"
            ReferencedContainer = "container:ObjectMapper.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
      <Testables>
         <TestableReference
            skipped = "NO">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "CD1603081AC023D6000CD69A"
               BuildableName = "ObjectMapper-macOSTests.xctest"
               BlueprintName = "ObjectMapper-macOSTests"
               ReferencedContainer = "container:ObjectMapper.xcodeproj">
            </BuildableReference>
         </TestableReference>
      </Testables>
   </TestAction>
   <LaunchAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      debugServiceExtension = "internal"
      allowLocationSimulation = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "CD1602FE1AC023D5000CD69A"
            BuildableName = "ObjectMapper.framework"
            BlueprintName = "ObjectMapper-macOS"
            ReferencedContainer = "container:ObjectMapper.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
   </LaunchAction>
   <ProfileAction
      buildConfiguration = "Release"
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      debugDocumentVersioning = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "CD1602FE1AC023D5000CD69A"
            BuildableName = "ObjectMapper.framework"
            BlueprintName = "ObjectMapper-macOS"
            ReferencedContainer = "container:ObjectMapper.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>


================================================
FILE: ObjectMapper.xcodeproj/xcshareddata/xcschemes/ObjectMapper-iOS.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "1020"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "6AAC8F7519F03C2900E7A677"
               BuildableName = "ObjectMapper.framework"
               BlueprintName = "ObjectMapper-iOS"
               ReferencedContainer = "container:ObjectMapper.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "NO"
            buildForProfiling = "NO"
            buildForArchiving = "NO"
            buildForAnalyzing = "NO">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "6AAC8F8019F03C2900E7A677"
               BuildableName = "ObjectMapper-iOSTests.xctest"
               BlueprintName = "ObjectMapper-iOSTests"
               ReferencedContainer = "container:ObjectMapper.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
      </BuildActionEntries>
   </BuildAction>
   <TestAction
      buildConfiguration = "Release"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      shouldUseLaunchSchemeArgsEnv = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "6AAC8F7519F03C2900E7A677"
            BuildableName = "ObjectMapper.framework"
            BlueprintName = "ObjectMapper-iOS"
            ReferencedContainer = "container:ObjectMapper.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
      <Testables>
         <TestableReference
            skipped = "NO">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "6AAC8F8019F03C2900E7A677"
               BuildableName = "ObjectMapper-iOSTests.xctest"
               BlueprintName = "ObjectMapper-iOSTests"
               ReferencedContainer = "container:ObjectMapper.xcodeproj">
            </BuildableReference>
         </TestableReference>
      </Testables>
   </TestAction>
   <LaunchAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      debugServiceExtension = "internal"
      allowLocationSimulation = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "6AAC8F7519F03C2900E7A677"
            BuildableName = "ObjectMapper.framework"
            BlueprintName = "ObjectMapper-iOS"
            ReferencedContainer = "container:ObjectMapper.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
   </LaunchAction>
   <ProfileAction
      buildConfiguration = "Release"
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      debugDocumentVersioning = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "6AAC8F7519F03C2900E7A677"
            BuildableName = "ObjectMapper.framework"
            BlueprintName = "ObjectMapper-iOS"
            ReferencedContainer = "container:ObjectMapper.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>


================================================
FILE: ObjectMapper.xcodeproj/xcshareddata/xcschemes/ObjectMapper-tvOS.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "1020"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "6A05B7A51BE274BE00F19B53"
               BuildableName = "ObjectMapper.framework"
               BlueprintName = "ObjectMapper-tvOS"
               ReferencedContainer = "container:ObjectMapper.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
      </BuildActionEntries>
   </BuildAction>
   <TestAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      shouldUseLaunchSchemeArgsEnv = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "6A05B7A51BE274BE00F19B53"
            BuildableName = "ObjectMapper.framework"
            BlueprintName = "ObjectMapper-tvOS"
            ReferencedContainer = "container:ObjectMapper.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
      <Testables>
         <TestableReference
            skipped = "NO">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "6A05B7AE1BE274BE00F19B53"
               BuildableName = "ObjectMapper-tvOSTests.xctest"
               BlueprintName = "ObjectMapper-tvOSTests"
               ReferencedContainer = "container:ObjectMapper.xcodeproj">
            </BuildableReference>
         </TestableReference>
      </Testables>
   </TestAction>
   <LaunchAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      debugServiceExtension = "internal"
      allowLocationSimulation = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "6A05B7A51BE274BE00F19B53"
            BuildableName = "ObjectMapper.framework"
            BlueprintName = "ObjectMapper-tvOS"
            ReferencedContainer = "container:ObjectMapper.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
   </LaunchAction>
   <ProfileAction
      buildConfiguration = "Release"
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      debugDocumentVersioning = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "6A05B7A51BE274BE00F19B53"
            BuildableName = "ObjectMapper.framework"
            BlueprintName = "ObjectMapper-tvOS"
            ReferencedContainer = "container:ObjectMapper.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>


================================================
FILE: ObjectMapper.xcodeproj/xcshareddata/xcschemes/ObjectMapper-watchOS.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "1020"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "6A2AD03C1B2C78540097E150"
               BuildableName = "ObjectMapper.framework"
               BlueprintName = "ObjectMapper-watchOS"
               ReferencedContainer = "container:ObjectMapper.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
      </BuildActionEntries>
   </BuildAction>
   <TestAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      shouldUseLaunchSchemeArgsEnv = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "6A2AD03C1B2C78540097E150"
            BuildableName = "ObjectMapper.framework"
            BlueprintName = "ObjectMapper-watchOS"
            ReferencedContainer = "container:ObjectMapper.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
      <Testables>
         <TestableReference
            skipped = "NO">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "6A2098072193AA00009AB4DF"
               BuildableName = "ObjectMapper-watchOSTests.xctest"
               BlueprintName = "ObjectMapper-watchOSTests"
               ReferencedContainer = "container:ObjectMapper.xcodeproj">
            </BuildableReference>
         </TestableReference>
      </Testables>
   </TestAction>
   <LaunchAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      debugServiceExtension = "internal"
      allowLocationSimulation = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "6A2AD03C1B2C78540097E150"
            BuildableName = "ObjectMapper.framework"
            BlueprintName = "ObjectMapper-watchOS"
            ReferencedContainer = "container:ObjectMapper.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
   </LaunchAction>
   <ProfileAction
      buildConfiguration = "Release"
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      debugDocumentVersioning = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "6A2AD03C1B2C78540097E150"
            BuildableName = "ObjectMapper.framework"
            BlueprintName = "ObjectMapper-watchOS"
            ReferencedContainer = "container:ObjectMapper.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>


================================================
FILE: ObjectMapper.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "group:ObjectMapper.xcodeproj">
   </FileRef>
</Workspace>


================================================
FILE: ObjectMapper.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IDEDidComputeMac32BitWarning</key>
	<true/>
</dict>
</plist>


================================================
FILE: ObjectMapper.xcworkspace/xcshareddata/ObjectMapper.xcscmblueprint
================================================
{
  "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "58AAB0051E2B4EEDF1845A552012E6D0EBAD9127",
  "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {

  },
  "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
    "58AAB0051E2B4EEDF1845A552012E6D0EBAD9127" : 0,
    "95438028B10BBB846574013D29F154A00556A9D1" : 0
  },
  "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "A42BB54B-7EE9-41B5-B851-0FC3BB5A9811",
  "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
    "58AAB0051E2B4EEDF1845A552012E6D0EBAD9127" : "ObjectMapper\/",
    "95438028B10BBB846574013D29F154A00556A9D1" : "ObjectMapperCarthage\/Checkouts\/Nimble"
  },
  "DVTSourceControlWorkspaceBlueprintNameKey" : "ObjectMapper",
  "DVTSourceControlWorkspaceBlueprintVersion" : 204,
  "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "ObjectMapper.xcworkspace",
  "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
    {
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/Hearst-DD\/ObjectMapper.git",
      "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "58AAB0051E2B4EEDF1845A552012E6D0EBAD9127"
    },
    {
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/Quick\/Nimble.git",
      "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "95438028B10BBB846574013D29F154A00556A9D1"
    }
  ]
}

================================================
FILE: Package.swift
================================================
// swift-tools-version:5.5

import PackageDescription

let package = Package(name: "ObjectMapper",
                      platforms: [.macOS(.v12),
                                  .iOS(.v13),
                                  .tvOS(.v9),
                                  .watchOS(.v2)],
                      products: [.library(name: "ObjectMapper",
                                          targets: ["ObjectMapper"])],
                      targets: [.target(name: "ObjectMapper",
                                        path: "Sources"),
                                .testTarget(name: "ObjectMapperTests",
                                            dependencies: ["ObjectMapper"],
                                            path: "Tests")],
                      swiftLanguageVersions: [.v5])


================================================
FILE: Package@swift-4.2.swift
================================================
// swift-tools-version:4.2
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "ObjectMapper",
    products: [
        .library(name: "ObjectMapper", targets: ["ObjectMapper"]),
    ],
    targets: [
        .target(
            name: "ObjectMapper", 
            path: "Sources"
        )
    ],
    swiftLanguageVersions: [.v3, .v4, .v4_2]
)


================================================
FILE: Package@swift-4.swift
================================================
// swift-tools-version:4.0
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "ObjectMapper",
    products: [
        .library(name: "ObjectMapper", targets: ["ObjectMapper"]),
    ],
    targets: [
        .target(
            name: "ObjectMapper", 
            path: "Sources"
        )
    ],
    swiftLanguageVersions = [3, 4]
)


================================================
FILE: README-CN.md
================================================
# ObjectMapper-CN-Guide
> 文档由Swift老司机活动中心负责翻译,欢迎关注[@SwiftOldDriver](http://weibo.com/6062089411)。翻译有问题可以到 [ObjectMapper-CN-Guide](https://github.com/SwiftOldDriver/ObjectMapper-CN-Guide) 提 PR。

[ObjectMapper](https://github.com/Hearst-DD/ObjectMapper) 是一个使用 Swift 编写的用于 model 对象(类和结构体)和 JSON  之间转换的框架。

- [特性](#特性)
- [基础使用方法](#基础使用方法)
- [映射嵌套对象](#映射嵌套对象)
- [自定义转换规则](#自定义转换规则)
- [继承](#继承)
- [泛型对象](#泛型对象)
- [映射时的上下文对象](#映射时的上下文对象)
- [ObjectMapper + Alamofire](#objectmapper--alamofire) 
- [ObjectMapper + Realm](#objectmapper--realm)
- [待完成](#待完成)
- [安装](#安装)

# 特性:
- 把 JSON 映射成对象 
- 把对象映射 JSON
- 支持嵌套对象 (单独的成员变量、在数组或字典中都可以)
- 在转换过程支持自定义规则
- 支持结构体( Struct )
- [Immutable support](#immutablemappable-protocol-beta) (目前还在 beta )

# 基础使用方法
为了支持映射,类或者结构体只需要实现```Mappable```协议。这个协议包含以下方法:
```swift
init?(map: Map)
mutating func mapping(map: Map)
```
ObjectMapper使用自定义的```<-``` 运算符来声明成员变量和 JSON 的映射关系。
```swift
class User: Mappable {
    var username: String?
    var age: Int?
    var weight: Double!
    var array: [AnyObject]?
    var dictionary: [String : AnyObject] = [:]
    var bestFriend: User?                       // 嵌套的 User 对象
    var friends: [User]?                        // Users 的数组
    var birthday: NSDate?

    required init?(map: Map) {

    }

    // Mappable
    func mapping(map: Map) {
        username    <- map["username"]
        age         <- map["age"]
        weight      <- map["weight"]
        array       <- map["arr"]
        dictionary  <- map["dict"]
        bestFriend  <- map["best_friend"]
        friends     <- map["friends"]
        birthday    <- (map["birthday"], DateTransform())
    }
}

struct Temperature: Mappable {
    var celsius: Double?
    var fahrenheit: Double?

    init?(map: Map) {

    }

    mutating func mapping(map: Map) {
        celsius 	<- map["celsius"]
        fahrenheit 	<- map["fahrenheit"]
    }
}
```

一旦你的对象实现了 `Mappable`, ObjectMapper就可以让你轻松的实现和 JSON 之间的转换。

把 JSON 字符串转成 model 对象:

```swift
let user = User(JSONString: JSONString)
```

把一个 model 转成 JSON 字符串:

```swift
let JSONString = user.toJSONString(prettyPrint: true)
```

也可以使用`Mapper.swift`类来完成转换(这个类还额外提供了一些函数来处理一些特殊的情况:

```swift
// 把 JSON 字符串转成 Model
let user = Mapper<User>().map(JSONString: JSONString)
// 根据 Model 生成 JSON 字符串
let JSONString = Mapper().toJSONString(user, prettyPrint: true)
```

ObjectMapper支持以下的类型映射到对象中:

- `Int`
- `Bool`
- `Double`
- `Float`
- `String`
- `RawRepresentable` (枚举)
- `Array<AnyObject>`
- `Dictionary<String, AnyObject>`
- `Object<T: Mappable>`
- `Array<T: Mappable>`
- `Array<Array<T: Mappable>>`
- `Set<T: Mappable>` 
- `Dictionary<String, T: Mappable>`
- `Dictionary<String, Array<T: Mappable>>`
- 以上所有的 Optional 类型
- 以上所有的隐式强制解包类型(Implicitly Unwrapped Optional)

## `Mappable` 协议

#### `mutating func mapping(map: Map)` 
所有的映射最后都会调用到这个函数。当解析 JSON 时,这个函数会在对象创建成功后被执行。当生成 JSON 时就只有这个函数会被对象调用。

#### `init?(map: Map)` 
这个可失败的初始化函数是 ObjectMapper 创建对象的时候使用的。开发者可以通过这个函数在映射前校验 JSON 。如果在这个方法里返回 nil 就不会执行 `mapping` 函数。可以通过传入的保存着 JSON 的  `Map` 对象进行校验:

```swift
required init?(map: Map){
	// 检查 JSON 里是否有一定要有的 "name" 属性
	if map.JSONDictionary["name"] == nil {
		return nil
	}
}
```

## `StaticMappable` 协议
`StaticMappable` 是 `Mappable` 之外的另一种选择。 这个协议可以让开发者通过一个静态函数初始化对象而不是通过 `init?(map: Map)`。

注意: `StaticMappable` 和 `Mappable` 都继承了 `BaseMappable` 协议。 `BaseMappable` 协议声明了 `mapping(map: Map)` 函数。

#### `static func objectForMapping(map: Map) -> BaseMappable?` 
ObjectMapper 使用这个函数获取对象后进行映射。开发者需要在这个函数里返回一个实现 `BaseMappable` 对象的实例。这个函数也可以用于:

- 在对象进行映射前校验 JSON 
- 提供一个缓存过的对象用于映射
- 返回另外一种类型的对象(当然是必须实现了 BaseMappable)用于映射。比如你可能通过检查 JSON 推断出用于映射的对象 ([看这个例子](https://github.com/Hearst-DD/ObjectMapper/blob/master/ObjectMapperTests/ClassClusterTests.swift#L62))。

如果你需要在 extension 里实现 ObjectMapper,你需要选择这个协议而不是 `Mappable` 。

## `ImmutableMappable` Protocol

使用 `ImmutableMappable` 可以映射不可变的属性。下面的表格展示了 `ImmutableMappable` 和 `Mappable` 的不同:

<table>
  <tr>
    <th>ImmutableMappable</th>
    <th>Mappable</th>
  </tr>
  <tr>
    <th colspan="2">Properties</th>
  </tr>
  <tr>
    <td>
<pre>
<strong>let</strong> id: Int
<strong>let</strong> name: String?
</pre>
  </td>
    <td>
<pre>
var id: Int!
var name: String?
</pre>
    </td>
  </tr>
  <tr>
    <th colspan="2">JSON -> Model</th>
  </tr>
  <tr>
    <td>
<pre>
init(map: Map) <strong>throws</strong> {
  id   = <strong>try</strong> map.value("id")
  name = <strong>try?</strong> map.value("name")
}
</pre>
  </td>
    <td>
<pre>
mutating func mapping(map: Map) {
  id   <- map["id"]
  name <- map["name"]
}
</pre>
    </td>
  </tr>
  <tr>
    <th colspan="2">Model -> JSON</th>
  </tr>
  <tr>
    <td>
<pre>
mutating func mapping(map: Map) {
  id   <strong>>>></strong> map["id"]
  name <strong>>>></strong> map["name"]
}
</pre>
    </td>
    <td>
<pre>
mutating func mapping(map: Map) {
  id   <- map["id"]
  name <- map["name"]
}
</pre>
    </td>
  </tr>
  <tr>
    <th colspan="2">Initializing</th>
  </tr>
  <tr>
    <td>
<pre>
<strong>try</strong> User(JSONString: JSONString)
</pre>
    </td>
    <td>
<pre>
User(JSONString: JSONString)
</pre>
    </td>
  </tr>
</table>

#### `init(map: Map) throws`

这个可能抛出异常的初始化函数用于在提供的 `Map` 里映射不可变属性。每个不可变的初始化属性都要在这个初始化函数里初始化。

当发生下列情况时初始化函数会抛出一个错误:

- `Map` 根据提供的键名获取不到对应值
- `Map` 使用 `Transform` 后没有得到值 

`ImmutableMappable` 使用 `Map.value(_:using:)` 方法从  `Map` 中获取值。因为可能抛出异常,这个方法在使用时需要使用  `try` 关键字。 `Optional` 的属性可以简单的用  `try?` 处理。

```swift
init(map: Map) throws {
    name      = try map.value("name") // throws an error when it fails
    createdAt = try map.value("createdAt", using: DateTransform()) // throws an error when it fails
    updatedAt = try? map.value("updatedAt", using: DateTransform()) // optional
    posts     = (try? map.value("posts")) ?? [] // optional + default value
}
```

#### `mutating func mapping(map: Map)`

这个方法是在 Model 转回 JSON 时调用的。因为不可变的属性不能被 `<-` 映射,所以映射回来时需要使用 `>>>` 。

```swift
mutating func mapping(map: Map) {
    name      >>> map["name"]
    createdAt >>> (map["createdAt"], DateTransform())
    updatedAt >>> (map["updatedAt"], DateTransform())
    posts     >>> map["posts"]
}
```
# 轻松映射嵌套对象

ObjectMapper 支持使用点语法来轻松实现嵌套对象的映射。比如有如下的 JSON 字符串:

```json
"distance" : {
     "text" : "102 ft",
     "value" : 31
}
```
你可以通过这种写法直接访问到嵌套对象:

```swift
func mapping(map: Map) {
    distance <- map["distance.value"]
}
```
嵌套的键名也支持访问数组中的值。如果有一个返回的 JSON 是一个包含 distance 的数组,可以通过这种写法访问:

```
distance <- map["distances.0.value"]
```
如果你的键名刚好含有 `.` 符号,你需要特别声明关闭上面提到的获取嵌套对象功能:

```swift
func mapping(map: Map) {
    identifier <- map["app.identifier", nested: false]
}
```
如果刚好有嵌套的对象的键名还有 `.` ,可以在中间加入一个自定义的分割符([#629](https://github.com/Hearst-DD/ObjectMapper/pull/629)):
```swift
func mapping(map: Map) {
    appName <- map["com.myapp.info->com.myapp.name", delimiter: "->"]
}
```
这种情况的 JSON 是这样的:

```json
"com.myapp.info" : {
     "com.myapp.name" : "SwiftOldDriver"
}
```

# 自定义转换规则
ObjectMapper 也支持在映射时自定义转换规则。如果要使用自定义转换,创建一个 tuple(元祖)包含 ```map["field_name"]``` 和你要使用的变换放在 ```<-``` 的右边:

```swift
birthday <- (map["birthday"], DateTransform())
```
当解析 JSON 时上面的转换会把 JSON 里面的 Int 值转成一个 NSDate ,如果是对象转为 JSON 时,则会把 NSDate 对象转成 Int 值。

只要实现```TransformType``` 协议就可以轻松的创建自定义的转换规则:

```swift
public protocol TransformType {
    associatedtype Object
    associatedtype JSON

    func transformFromJSON(_ value: Any?) -> Object?
    func transformToJSON(_ value: Object?) -> JSON?
}
```

### TransformOf
大多数情况下你都可以使用框架提供的转换类 ```TransformOf``` 来快速的实现一个期望的转换。 ```TransformOf``` 的初始化需要两个类型和两个闭包。两个类型声明了转换的目标类型和源类型,闭包则实现具体转换逻辑。

举个例子,如果你想要把一个 JSON 字符串转成 Int ,你可以像这样使用 ```TransformOf``` :

```swift
let transform = TransformOf<Int, String>(fromJSON: { (value: String?) -> Int? in 
    // 把值从 String? 转成 Int?
    return Int(value!)
}, toJSON: { (value: Int?) -> String? in
    // 把值从 Int? 转成 String?
    if let value = value {
        return String(value)
    }
    return nil
})

id <- (map["id"], transform)
```
这是一种更省略的写法:

```swift
id <- (map["id"], TransformOf<Int, String>(fromJSON: { Int($0!) }, toJSON: { $0.map { String($0) } }))
```
# 继承

实现了  ```Mappable``` 协议的类可以容易的被继承。当继承一个 mappable 的类时,使用这样的结构:

```swift
class Base: Mappable {
	var base: String?
	
	required init?(map: Map) {

	}

	func mapping(map: Map) {
		base <- map["base"]
	}
}

class Subclass: Base {
	var sub: String?

	required init?(map: Map) {
		super.init(map)
	}

	override func mapping(map: Map) {
		super.mapping(map)
		
		sub <- map["sub"]
	}
}
```

注意确认子类中的实现调用了父类中正确的初始化器和映射函数。

# 泛型对象

ObjectMapper 可以处理泛型只要这个泛型也实现了`Mappable`协议。看这个例子:

```swift
class Result<T: Mappable>: Mappable {
    var result: T?

    required init?(map: Map){

    }

    func mapping(map: Map) {
        result <- map["result"]
    }
}

let result = Mapper<Result<User>>().map(JSON)
```
# 映射时的上下文对象

`Map` 是在映射时传入的对象,带有一个 optional  `MapContext` 对象,开发者可以通过使用这个对象在映射时传入一些信息。

为了使用这个特性,需要先创建一个对象实现了 `MapContext` 协议(这个协议是空的),然后在初始化时传入 `Mapper` 中。

```swift
struct Context: MapContext {
	var importantMappingInfo = "映射时需要知道的额外信息"
}

class User: Mappable {
	var name: String?
	
	required init?(map: Map){
	
	}
	
	func mapping(map: Map){
		if let context = map.context as? Context {
			// 获取到额外的信息
		}
	}
}

let context = Context()
let user = Mapper<User>(context: context).map(JSONString)
```

# ObjectMapper + Alamofire

如果网络层你使用的是  [Alamofire](https://github.com/Alamofire/Alamofire) ,并且你希望把返回的结果转换成 Swift 对象,你可以使用 [AlamofireObjectMapper](https://github.com/tristanhimmelman/AlamofireObjectMapper) 。这是一个使用 ObjectMapper 实现的把返回的 JSON 自动转成 Swift 对象的 Alamofire 的扩展。 


# ObjectMapper + Realm

ObjectMapper 可以和 Realm 一起配合使用。使用下面的声明结构就可以使用 ObjectMapper 生成 Realm 对象:

```swift
class Model: Object, Mappable {
	dynamic var name = ""

	required convenience init?(map: Map) {
		self.init()
	}

	func mapping(map: Map) {
		name <- map["name"]
	}
}
```

如果你想要序列化相关联的 RealmObject,你可以使用 [ObjectMapper+Realm](https://github.com/jakenberg/ObjectMapper-Realm)。这是一个简单的 Realm 扩展,用于把任意的 JSON 序列化成 Realm 的类(ealm's List class。)

注意:使用 ObjectMappers 的 `toJSON` 函数来生成 JSON 字符串只在 Realm 的写事务中有效(write transaction)。这是因为 ObjectMapper 在解析和生成时在映射函数( `<-` )中使用  `inout` 作为标记( flag )。Realm 会检测到标记并且强制要求 `toJSON` 函数只能在一个写的事务中调用,即使这个对象并没有被修改。

# 待完成
- 改善错误的处理。可能使用 `throws` 来处理。
- 相关类的文档完善

# 安装
### Cocoapods
如果你的项目使用 [CocoaPods 0.36 及以上](http://blog.cocoapods.org/Pod-Authors-Guide-to-CocoaPods-Frameworks/) 的版本,你可以把下面内容添加到在 `Podfile` 中,将 ObjectMapper 添加到你的项目中:

```ruby
pod 'ObjectMapper', '~> 2.2'
```

### Carthage
如果你的项目使用  [Carthage](https://github.com/Carthage/Carthage) ,你可以把下面的内容添加到 `Cartfile` 中,将 ObjectMapper 的依赖到你的项目中:

```
github "Hearst-DD/ObjectMapper" ~> 2.2
```

### Swift Package Manager
如果你的项目使用  [Swift Package Manager](https://swift.org/package-manager/) ,那么你可以把下面内容添加到 `Package.swift` 中的 `dependencies` 数组中,将 ObjectMapper 的依赖到你的项目中:

```swift
.Package(url: "https://github.com/Hearst-DD/ObjectMapper.git", majorVersion: 2, minor: 2),
```


### Submodule
此外,ObjectMapper 也可以作为一个 submodule 添加到项目中:

1. 打开终端,使用 `cd` 命令进入项目文件的根目录下,然后在终端中输入 `git submodule add https://github.com/Hearst-DD/ObjectMapper.git` ,把 ObjectMapper 作为项目的一个 [submodule](http://git-scm.com/docs/git-submodule) 添加进来。
2. 打开 `ObjectMapper` 文件,并将 `ObjectMapper.xcodeproj` 拖进你 app 项目的文件导航中。
3. 在 Xcode 中,文件导航中点击蓝色项目图标进入到 target 配置界面,在侧边栏的 "TARGETS" 下选择主工程对应的target。
4. 确保 `ObjectMapper.framework` 的部署版本( deployment target )和主工程的部署版本保持一致。
5. 在配置界面的顶部选项栏中,打开 "Build Phases" 面板。
6. 展开 "Target Dependencies" 组,并添加 `ObjectMapper.framework` 。
7. 点击面板左上角的 `+` 按钮,选择 "New Copy Files Phase"。将这个阶段重命名为 "Copy Frameworks",设置  "Destination" 为 "Frameworks",最后添加 `ObjectMapper.framework` 。  




================================================
FILE: README.md
================================================
ObjectMapper
============
[![CocoaPods](https://img.shields.io/cocoapods/v/ObjectMapper.svg)](https://github.com/tristanhimmelman/ObjectMapper)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
[![Swift Package Manager](https://rawgit.com/jlyonsmith/artwork/master/SwiftPackageManager/swiftpackagemanager-compatible.svg)](https://swift.org/package-manager/)
[![Build Status](https://travis-ci.org/tristanhimmelman/ObjectMapper.svg?branch=master)](https://travis-ci.org/tristanhimmelman/ObjectMapper)

ObjectMapper is a framework written in Swift that makes it easy for you to convert your model objects (classes and structs) to and from JSON. 

- [Features](#features)
- [The Basics](#the-basics)
- [Mapping Nested Objects](#easy-mapping-of-nested-objects)
- [Custom Transformations](#custom-transforms)
- [Subclassing](#subclasses)
- [Generic Objects](#generic-objects)
- [Mapping Context](#mapping-context)
- [ObjectMapper + Alamofire](#objectmapper--alamofire) 
- [ObjectMapper + Realm](#objectmapper--realm)
- [Projects using ObjectMapper](#projects-using-objectmapper)
- [To Do](#to-do)
- [Contributing](#contributing)
- [Installation](#installation)

# Features:
- Mapping JSON to objects
- Mapping objects to JSON
- Nested Objects (stand alone, in arrays or in dictionaries)
- Custom transformations during mapping
- Struct support
- [Immutable support](#immutablemappable-protocol)

# The Basics
To support mapping, a class or struct just needs to implement the ```Mappable``` protocol which includes the following functions:
```swift
init?(map: Map)
mutating func mapping(map: Map)
```
ObjectMapper uses the ```<-``` operator to define how each member variable maps to and from JSON.

```swift
class User: Mappable {
    var username: String?
    var age: Int?
    var weight: Double!
    var array: [Any]?
    var dictionary: [String : Any] = [:]
    var bestFriend: User?                       // Nested User object
    var friends: [User]?                        // Array of Users
    var birthday: Date?

    required init?(map: Map) {

    }

    // Mappable
    func mapping(map: Map) {
        username    <- map["username"]
        age         <- map["age"]
        weight      <- map["weight"]
        array       <- map["arr"]
        dictionary  <- map["dict"]
        bestFriend  <- map["best_friend"]
        friends     <- map["friends"]
        birthday    <- (map["birthday"], DateTransform())
    }
}

struct Temperature: Mappable {
    var celsius: Double?
    var fahrenheit: Double?

    init?(map: Map) {

    }

    mutating func mapping(map: Map) {
        celsius 	<- map["celsius"]
        fahrenheit 	<- map["fahrenheit"]
    }
}
```

Once your class implements `Mappable`, ObjectMapper allows you to easily convert to and from JSON. 

Convert a JSON string to a model object:
```swift
let user = User(JSONString: JSONString)
```

Convert a model object to a JSON string:
```swift
let JSONString = user.toJSONString(prettyPrint: true)
```

Alternatively, the `Mapper.swift` class can also be used to accomplish the above (it also provides extra functionality for other situations):
```swift
// Convert JSON String to Model
let user = Mapper<User>().map(JSONString: JSONString)
// Create JSON String from Model
let JSONString = Mapper().toJSONString(user, prettyPrint: true)
```

ObjectMapper can map classes composed of the following types:
- `Int`
- `Bool`
- `Double`
- `Float`
- `String`
- `RawRepresentable` (Enums)
- `Array<Any>`
- `Dictionary<String, Any>`
- `Object<T: Mappable>`
- `Array<T: Mappable>`
- `Array<Array<T: Mappable>>`
- `Set<T: Mappable>` 
- `Dictionary<String, T: Mappable>`
- `Dictionary<String, Array<T: Mappable>>`
- Optionals of all the above
- Implicitly Unwrapped Optionals of the above

## `Mappable` Protocol

#### `mutating func mapping(map: Map)` 
This function is where all mapping definitions should go. When parsing JSON, this function is executed after successful object creation. When generating JSON, it is the only function that is called on the object.

#### `init?(map: Map)` 
This failable initializer is used by ObjectMapper for object creation. It can be used by developers to validate JSON prior to object serialization. Returning nil within the function will prevent the mapping from occuring. You can inspect the JSON stored within the `Map` object to do your validation:
```swift
required init?(map: Map){
	// check if a required "name" property exists within the JSON.
	if map.JSON["name"] == nil {
		return nil
	}
}
```

## `StaticMappable` Protocol
`StaticMappable` is an alternative to `Mappable`. It provides developers with a static function that is used by ObjectMapper for object initialization instead of `init?(map: Map)`. 

Note: `StaticMappable`, like `Mappable`, is a sub protocol of `BaseMappable` which is where the `mapping(map: Map)` function is defined.

#### `static func objectForMapping(map: Map) -> BaseMappable?` 
ObjectMapper uses this function to get objects to use for mapping. Developers should return an instance of an object that conforms to `BaseMappable` in this function. This function can also be used to:
- validate JSON prior to object serialization
- provide an existing cached object to be used for mapping
- return an object of another type (which also conforms to `BaseMappable`) to be used for mapping. For instance, you may inspect the JSON to infer the type of object that should be used for mapping ([see examples in ClassClusterTests.swift](https://github.com/Hearst-DD/ObjectMapper/blob/master/Tests/ObjectMapperTests/ClassClusterTests.swift#L67))

If you need to implement ObjectMapper in an extension, you will need to adopt this protocol instead of `Mappable`. 

## `ImmutableMappable` Protocol

`ImmutableMappable` provides the ability to map immutable properties. This is how `ImmutableMappable` differs from `Mappable`:

<table>
  <tr>
    <th>ImmutableMappable</th>
    <th>Mappable</th>
  </tr>
  <tr>
    <th colspan="2">Properties</th>
  </tr>
  <tr>
    <td>
<pre>
<strong>let</strong> id: Int
<strong>let</strong> name: String?
</pre>
  </td>
    <td>
<pre>
var id: Int!
var name: String?
</pre>
    </td>
  </tr>
  <tr>
    <th colspan="2">JSON -> Model</th>
  </tr>
  <tr>
    <td>
<pre>
init(map: Map) <strong>throws</strong> {
  id   = <strong>try</strong> map.value("id")
  name = <strong>try?</strong> map.value("name")
}
</pre>
  </td>
    <td>
<pre>
mutating func mapping(map: Map) {
  id   <- map["id"]
  name <- map["name"]
}
</pre>
    </td>
  </tr>
  <tr>
    <th colspan="2">Model -> JSON</th>
  </tr>
  <tr>
    <td>
<pre>
func mapping(map: Map) {
  id   <strong>>>></strong> map["id"]
  name <strong>>>></strong> map["name"]
}
</pre>
    </td>
    <td>
<pre>
mutating func mapping(map: Map) {
  id   <- map["id"]
  name <- map["name"]
}
</pre>
    </td>
  </tr>
  <tr>
    <th colspan="2">Initializing</th>
  </tr>
  <tr>
    <td>
<pre>
<strong>try</strong> User(JSONString: JSONString)
</pre>
    </td>
    <td>
<pre>
User(JSONString: JSONString)
</pre>
    </td>
  </tr>
</table>

#### `init(map: Map) throws`

This throwable initializer is used to map immutable properties from the given `Map`. Every immutable property should be initialized in this initializer.

This initializer throws an error when:
- `Map` fails to get a value for the given key
- `Map` fails to transform a value using `Transform`

`ImmutableMappable` uses `Map.value(_:using:)` method to get values from the `Map`. This method should be used with the `try` keyword as it is throwable. `Optional` properties can easily be handled using `try?`.

```swift
init(map: Map) throws {
    name      = try map.value("name") // throws an error when it fails
    createdAt = try map.value("createdAt", using: DateTransform()) // throws an error when it fails
    updatedAt = try? map.value("updatedAt", using: DateTransform()) // optional
    posts     = (try? map.value("posts")) ?? [] // optional + default value
    surname    = try? map.value("surname", default: "DefaultSurname") // optional + default value as an argument
}
```

#### `mutating func mapping(map: Map)`

This method is where the reverse transform is performed (model to JSON). Since immutable properties cannot be mapped with the `<-` operator, developers have to define the reverse transform using the `>>>` operator.

```swift
mutating func mapping(map: Map) {
    name      >>> map["name"]
    createdAt >>> (map["createdAt"], DateTransform())
    updatedAt >>> (map["updatedAt"], DateTransform())
    posts     >>> map["posts"]
}
```

# Easy Mapping of Nested Objects
ObjectMapper supports dot notation within keys for easy mapping of nested objects. Given the following JSON String:
```json
"distance" : {
     "text" : "102 ft",
     "value" : 31
}
```
You can access the nested objects as follows:
```swift
func mapping(map: Map) {
    distance <- map["distance.value"]
}
```
Nested keys also support accessing values from an array. Given a JSON response with an array of distances, the value could be accessed as follows:
```swift
distance <- map["distances.0.value"]
```
If you have a key that contains `.`, you can individually disable the above feature as follows:
```swift
func mapping(map: Map) {
    identifier <- map["app.identifier", nested: false]
}
```
When you have nested keys which contain `.`, you can pass the custom nested key delimiter as follows ([#629](https://github.com/tristanhimmelman/ObjectMapper/pull/629)):
```swift
func mapping(map: Map) {
    appName <- map["com.myapp.info->com.myapp.name", delimiter: "->"]
}
```

# Custom Transforms
ObjectMapper also supports custom transforms that convert values during the mapping process. To use a transform, simply create a tuple with `map["field_name"]` and the transform of your choice on the right side of the `<-` operator:
```swift
birthday <- (map["birthday"], DateTransform())
```
The above transform will convert the JSON Int value to an Date when reading JSON and will convert the Date to an Int when converting objects to JSON.

You can easily create your own custom transforms by adopting and implementing the methods in the `TransformType` protocol:
```swift
public protocol TransformType {
    associatedtype Object
    associatedtype JSON

    func transformFromJSON(_ value: Any?) -> Object?
    func transformToJSON(_ value: Object?) -> JSON?
}
```

### TransformOf
In a lot of situations you can use the built-in transform class `TransformOf` to quickly perform a desired transformation. `TransformOf` is initialized with two types and two closures. The types define what the transform is converting to and from and the closures perform the actual transformation. 

For example, if you want to transform a JSON `String` value to an `Int` you could use `TransformOf` as follows:
```swift
let transform = TransformOf<Int, String>(fromJSON: { (value: String?) -> Int? in 
    // transform value from String? to Int?
    return Int(value!)
}, toJSON: { (value: Int?) -> String? in
    // transform value from Int? to String?
    if let value = value {
        return String(value)
    }
    return nil
})

id <- (map["id"], transform)
```
Here is a more condensed version of the above:
```swift
id <- (map["id"], TransformOf<Int, String>(fromJSON: { Int($0!) }, toJSON: { $0.map { String($0) } }))
```

# Subclasses

Classes that implement the `Mappable` protocol can easily be subclassed. When subclassing mappable classes, follow the structure below:

```swift
class Base: Mappable {
    var base: String?
    
    required init?(map: Map) {

    }

    func mapping(map: Map) {
        base <- map["base"]
    }
}

class Subclass: Base {
    var sub: String?

    required init?(map: Map) {
        super.init(map)
    }

    override func mapping(map: Map) {
        super.mapping(map)
        
        sub <- map["sub"]
    }
}
```

Make sure your subclass implementation calls the right initializers and mapping functions to also apply the mappings from your superclass.

# Generic Objects

ObjectMapper can handle classes with generic types as long as the generic type also conforms to `Mappable`. See the following example:
```swift
class Result<T: Mappable>: Mappable {
    var result: T?

    required init?(map: Map){

    }

    func mapping(map: Map) {
        result <- map["result"]
    }
}

let result = Mapper<Result<User>>().map(JSON)
```

# Mapping Context

The `Map` object which is passed around during mapping, has an optional `MapContext` object that is available for developers to use if they need to pass information around during mapping. 

To take advantage of this feature, simply create an object that implements `MapContext` (which is an empty protocol) and pass it into `Mapper` during initialization. 
```swift
struct Context: MapContext {
	var importantMappingInfo = "Info that I need during mapping"
}

class User: Mappable {
	var name: String?
	
	required init?(map: Map){
	
	}
	
	func mapping(map: Map){
		if let context = map.context as? Context {
			// use context to make decisions about mapping
		}
	}
}

let context = Context()
let user = Mapper<User>(context: context).map(JSONString)
```

# ObjectMapper + Alamofire

If you are using [Alamofire](https://github.com/Alamofire/Alamofire) for networking and you want to convert your responses to Swift objects, you can use [AlamofireObjectMapper](https://github.com/tristanhimmelman/AlamofireObjectMapper). It is a simple Alamofire extension that uses ObjectMapper to automatically map JSON response data to Swift objects.


# ObjectMapper + Realm

ObjectMapper and Realm can be used together. Simply follow the class structure below and you will be able to use ObjectMapper to generate your Realm models:

```swift
class Model: Object, Mappable {
    dynamic var name = ""

    required convenience init?(map: Map) {
        self.init()
    }

    func mapping(map: Map) {
        name <- map["name"]
    }
}
```

If you want to serialize associated RealmObjects, you can use [ObjectMapper+Realm](https://github.com/jakenberg/ObjectMapper-Realm). It is a simple Realm extension that serializes arbitrary JSON into Realm's `List` class.

To serialize Swift `String`, `Int`, `Double` and `Bool` arrays you can use [ObjectMapperAdditions/Realm](https://github.com/APUtils/ObjectMapperAdditions#realm-features). It'll wrap Swift types into RealmValues that can be stored in Realm's `List` class.

Note: Generating a JSON string of a Realm Object using ObjectMappers' `toJSON` function only works within a Realm write transaction. This is because ObjectMapper uses the `inout` flag in its mapping functions (`<-`) which are used both for serializing and deserializing. Realm detects the flag and forces the `toJSON` function to be called within a write block even though the objects are not being modified.

# Projects Using ObjectMapper
- [Xcode Plugin for generating `Mappable` and `ImmutableMappable` code](https://github.com/liyanhuadev/ObjectMapper-Plugin)

- [Json4Swift - Supports generating `ImmutableMappable` structs online (no plugins needed)](http://www.json4swift.com)

- [JSON to Model - Template based MacOS app which generates structs with customisation.](https://github.com/chanonly123/Json-Model-Generator)  [⬇️Download App](https://github.com/chanonly123/Json-Model-Generator/raw/master/JsonToModel.zip)

If you have a project that utilizes, extends or provides tooling for ObjectMapper, please submit a PR with a link to your project in this section of the README.

# To Do
- Improve error handling. Perhaps using `throws`
- Class cluster documentation

# Contributing

Contributions are very welcome 👍😃. 

Before submitting any pull request, please ensure you have run the included tests and they have passed. If you are including new functionality, please write test cases for it as well.

# Installation
### Cocoapods
ObjectMapper can be added to your project using [CocoaPods 0.36 or later](http://blog.cocoapods.org/Pod-Authors-Guide-to-CocoaPods-Frameworks/) by adding the following line to your `Podfile`:

```ruby
pod 'ObjectMapper', '~> 3.5' (check releases to make sure this is the latest version)
```

### Carthage
If you're using [Carthage](https://github.com/Carthage/Carthage) you can add a dependency on ObjectMapper by adding it to your `Cartfile`:

```
github "tristanhimmelman/ObjectMapper" ~> 3.5 (check releases to make sure this is the latest version)
```

### Swift Package Manager
To add ObjectMapper to a [Swift Package Manager](https://swift.org/package-manager/) based project, add:

```swift
.package(url: "https://github.com/tristanhimmelman/ObjectMapper.git", .upToNextMajor(from: "4.1.0")),
```
to your `Package.swift` files `dependencies` array.

### Submodule
Otherwise, ObjectMapper can be added as a submodule:

1. Add ObjectMapper as a [submodule](http://git-scm.com/docs/git-submodule) by opening the terminal, `cd`-ing into your top-level project directory, and entering the command `git submodule add https://github.com/tristanhimmelman/ObjectMapper.git`
2. Open the `ObjectMapper` folder, and drag `ObjectMapper.xcodeproj` into the file navigator of your app project.
3. In Xcode, navigate to the target configuration window by clicking on the blue project icon, and selecting the application target under the "Targets" heading in the sidebar.
4. Ensure that the deployment target of `ObjectMapper.framework` matches that of the application target.
5. In the tab bar at the top of that window, open the "Build Phases" panel.
6. Expand the "Target Dependencies" group, and add `ObjectMapper.framework`.
7. Click on the `+` button at the top left of the panel and select "New Copy Files Phase". Rename this new phase to "Copy Frameworks", set the "Destination" to "Frameworks", and add `ObjectMapper.framework`.


================================================
FILE: Sources/CodableTransform.swift
================================================
//
//  CodableTransform.swift
//  ObjectMapper
//
//  Created by Jari Kalinainen on 10/10/2018.
//
//  The MIT License (MIT)
//
//  Copyright (c) 2014-2018 Tristan Himmelman
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy
//  of this software and associated documentation files (the "Software"), to deal
//  in the Software without restriction, including without limitation the rights
//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the Software is
//  furnished to do so, subject to the following conditions:
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//  THE SOFTWARE.

import Foundation

/// Transforms JSON dictionary to Codable type T and back
open class CodableTransform<T: Codable>: TransformType {

    public typealias Object = T
    public typealias JSON = Any

    public init() {}

    open func transformFromJSON(_ value: Any?) -> Object? {
				var _data: Data? = nil
				switch value {
				case let dict as [String : Any]:
					_data = try? JSONSerialization.data(withJSONObject: dict, options: [])
				case let array as [[String : Any]]:
					_data = try? JSONSerialization.data(withJSONObject: array, options: [])
				default:
					_data = nil
				}
				guard let data = _data else { return nil }
				
        do {
            let decoder = JSONDecoder()
            let item = try decoder.decode(T.self, from: data)
            return item
        } catch {
            return nil
        }
    }

    open func transformToJSON(_ value: T?) -> JSON? {
        guard let item = value else {
            return nil
        }
        do {
            let encoder = JSONEncoder()
            let data = try encoder.encode(item)
            let dictionary = try JSONSerialization.jsonObject(with: data, options: .allowFragments)
            return dictionary
        } catch {
            return nil
        }
    }
}


================================================
FILE: Sources/CustomDateFormatTransform.swift
================================================
//
//  CustomDateFormatTransform.swift
//  ObjectMapper
//
//  Created by Dan McCracken on 3/8/15.
//
//  The MIT License (MIT)
//
//  Copyright (c) 2014-2018 Tristan Himmelman
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy
//  of this software and associated documentation files (the "Software"), to deal
//  in the Software without restriction, including without limitation the rights
//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the Software is
//  furnished to do so, subject to the following conditions:
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//  THE SOFTWARE.

import Foundation

open class CustomDateFormatTransform: DateFormatterTransform {
	
    public init(formatString: String) {
		let formatter = DateFormatter()
		formatter.locale = Locale(identifier: "en_US_POSIX")
		formatter.dateFormat = formatString
		
		super.init(dateFormatter: formatter)
    }
}


================================================
FILE: Sources/DataTransform.swift
================================================
//
//  DataTransform.swift
//  ObjectMapper
//
//  Created by Yagrushkin, Evgeny on 8/30/16.
//
//  The MIT License (MIT)
//
//  Copyright (c) 2014-2018 Tristan Himmelman
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy
//  of this software and associated documentation files (the "Software"), to deal
//  in the Software without restriction, including without limitation the rights
//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the Software is
//  furnished to do so, subject to the following conditions:
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//  THE SOFTWARE.

import Foundation

open class DataTransform: TransformType {
	public typealias Object = Data
	public typealias JSON = String
	
	public init() {}
	
	open func transformFromJSON(_ value: Any?) -> Data? {
		guard let string = value as? String else{
			return nil
		}
		return Data(base64Encoded: string)
	}
	
	open func transformToJSON(_ value: Data?) -> String? {
		guard let data = value else{
			return nil
		}
		return data.base64EncodedString()
	}
}


================================================
FILE: Sources/DateFormatterTransform.swift
================================================
//
//  DateFormatterTransform.swift
//  ObjectMapper
//
//  Created by Tristan Himmelman on 2015-03-09.
//
//  The MIT License (MIT)
//
//  Copyright (c) 2014-2018 Tristan Himmelman
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy
//  of this software and associated documentation files (the "Software"), to deal
//  in the Software without restriction, including without limitation the rights
//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the Software is
//  furnished to do so, subject to the following conditions:
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//  THE SOFTWARE.

import Foundation

open class DateFormatterTransform: TransformType {
	public typealias Object = Date
	public typealias JSON = String
	
	public let dateFormatter: DateFormatter
	
	public init(dateFormatter: DateFormatter) {
		self.dateFormatter = dateFormatter
	}
	
	open func transformFromJSON(_ value: Any?) -> Date? {
		if let dateString = value as? String {
			return dateFormatter.date(from: dateString)
		}
		return nil
	}
	
	open func transformToJSON(_ value: Date?) -> String? {
		if let date = value {
			return dateFormatter.string(from: date)
		}
		return nil
	}
}


================================================
FILE: Sources/DateTransform.swift
================================================
//
//  DateTransform.swift
//  ObjectMapper
//
//  Created by Tristan Himmelman on 2014-10-13.
//
//  The MIT License (MIT)
//
//  Copyright (c) 2014-2018 Tristan Himmelman
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy
//  of this software and associated documentation files (the "Software"), to deal
//  in the Software without restriction, including without limitation the rights
//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the Software is
//  furnished to do so, subject to the following conditions:
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//  THE SOFTWARE.

import Foundation

open class DateTransform: TransformType {
	public typealias Object = Date
	public typealias JSON = Double

	public enum Unit: TimeInterval {
		case seconds = 1
		case milliseconds = 1_000
		
		func addScale(to interval: TimeInterval) -> TimeInterval {
			return interval * rawValue
		}
		
		func removeScale(from interval: TimeInterval) -> TimeInterval {
			return interval / rawValue
		}
	}
	
	private let unit: Unit
	
	public init(unit: Unit = .seconds) {
		self.unit = unit
	}

	open func transformFromJSON(_ value: Any?) -> Date? {
		var timeInterval: TimeInterval?
		if let timeInt = value as? Double {
			timeInterval = TimeInterval(timeInt)
		}
		
		if let timeStr = value as? String {
			timeInterval = TimeInterval(atof(timeStr))
		}
		
		return timeInterval.flatMap {
			return Date(timeIntervalSince1970: unit.removeScale(from: $0))
		}
	}

	open func transformToJSON(_ value: Date?) -> Double? {
		if let date = value {
			return Double(unit.addScale(to: date.timeIntervalSince1970))
		}
		return nil
	}
}


================================================
FILE: Sources/DictionaryTransform.swift
================================================
//
//  DictionaryTransform.swift
//  ObjectMapper
//
//  Created by Milen Halachev on 7/20/16.
//
//  Copyright (c) 2014-2018 Tristan Himmelman
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy
//  of this software and associated documentation files (the "Software"), to deal
//  in the Software without restriction, including without limitation the rights
//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the Software is
//  furnished to do so, subject to the following conditions:
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//  THE SOFTWARE.

import Foundation

///Transforms [String: AnyObject] <-> [Key: Value] where Key is RawRepresentable as String, Value is Mappable
public struct DictionaryTransform<Key, Value>: TransformType where Key: Hashable, Key: RawRepresentable, Key.RawValue == String, Value: Mappable {
	
	public init() {
		
	}
	
	public func transformFromJSON(_ value: Any?) -> [Key: Value]? {
		
		guard let json = value as? [String: Any] else {
			
			return nil
		}
		
		let result = json.reduce([:]) { (result, element) -> [Key: Value] in
			
			guard
			let key = Key(rawValue: element.0),
			let valueJSON = element.1 as? [String: Any],
			let value = Value(JSON: valueJSON)
			else {
				
				return result
			}
			
			var result = result
			result[key] = value
			return result
		}
		
		return result
	}
	
	public func transformToJSON(_ value: [Key: Value]?) -> Any? {
		
		let result = value?.reduce([:]) { (result, element) -> [String: Any] in
			
			let key = element.0.rawValue
			let value = element.1.toJSON()
			
			var result = result
			result[key] = value
			return result
		}
		
		return result
	}
}


================================================
FILE: Sources/EnumOperators.swift
================================================
//
//  EnumOperators.swift
//  ObjectMapper
//
//  Created by Tristan Himmelman on 2016-09-26.
//
//  The MIT License (MIT)
//
//  Copyright (c) 2014-2018 Tristan Himmelman
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy
//  of this software and associated documentation files (the "Software"), to deal
//  in the Software without restriction, including without limitation the rights
//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the Software is
//  furnished to do so, subject to the following conditions:
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//  THE SOFTWARE.

import Foundation


// MARK:- Raw Representable types

/// Object of Raw Representable type
public func <- <T: RawRepresentable>(left: inout T, right: Map) {
	left <- (right, EnumTransform())
}

public func >>> <T: RawRepresentable>(left: T, right: Map) {
	left >>> (right, EnumTransform())
}


/// Optional Object of Raw Representable type
public func <- <T: RawRepresentable>(left: inout T?, right: Map) {
	left <- (right, EnumTransform())
}

public func >>> <T: RawRepresentable>(left: T?, right: Map) {
	left >>> (right, EnumTransform())
}


// Code targeting the Swift 4.1 compiler and below.
#if !(swift(>=4.1.50) || (swift(>=3.4) && !swift(>=4.0)))
/// Implicitly Unwrapped Optional Object of Raw Representable type
public func <- <T: RawRepresentable>(left: inout T!, right: Map) {
	left <- (right, EnumTransform())
}
#endif

// MARK:- Arrays of Raw Representable type

/// Array of Raw Representable object
public func <- <T: RawRepresentable>(left: inout [T], right: Map) {
	left <- (right, EnumTransform())
}

public func >>> <T: RawRepresentable>(left: [T], right: Map) {
	left >>> (right, EnumTransform())
}


/// Array of Raw Representable object
public func <- <T: RawRepresentable>(left: inout [T]?, right: Map) {
	left <- (right, EnumTransform())
}

public func >>> <T: RawRepresentable>(left: [T]?, right: Map) {
	left >>> (right, EnumTransform())
}


// Code targeting the Swift 4.1 compiler and below.
#if !(swift(>=4.1.50) || (swift(>=3.4) && !swift(>=4.0)))
/// Array of Raw Representable object
public func <- <T: RawRepresentable>(left: inout [T]!, right: Map) {
	left <- (right, EnumTransform())
}
#endif

// MARK:- Dictionaries of Raw Representable type

/// Dictionary of Raw Representable object
public func <- <T: RawRepresentable>(left: inout [String: T], right: Map) {
	left <- (right, EnumTransform())
}

public func >>> <T: RawRepresentable>(left: [String: T], right: Map) {
	left >>> (right, EnumTransform())
}


/// Dictionary of Raw Representable object
public func <- <T: RawRepresentable>(left: inout [String: T]?, right: Map) {
	left <- (right, EnumTransform())
}

public func >>> <T: RawRepresentable>(left: [String: T]?, right: Map) {
	left >>> (right, EnumTransform())
}


// Code targeting the Swift 4.1 compiler and below.
#if !(swift(>=4.1.50) || (swift(>=3.4) && !swift(>=4.0)))
/// Dictionary of Raw Representable object
public func <- <T: RawRepresentable>(left: inout [String: T]!, right: Map) {
	left <- (right, EnumTransform())
}
#endif


================================================
FILE: Sources/EnumTransform.swift
================================================
//
//  EnumTransform.swift
//  ObjectMapper
//
//  Created by Kaan Dedeoglu on 3/20/15.
//
//  The MIT License (MIT)
//
//  Copyright (c) 2014-2018 Tristan Himmelman
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy
//  of this software and associated documentation files (the "Software"), to deal
//  in the Software without restriction, including without limitation the rights
//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the Software is
//  furnished to do so, subject to the following conditions:
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//  THE SOFTWARE.

import Foundation

open class EnumTransform<T: RawRepresentable>: TransformType {
	public typealias Object = T
	public typealias JSON = T.RawValue
	
	public init() {}
	
	open func transformFromJSON(_ value: Any?) -> T? {
		if let raw = value as? T.RawValue {
			return T(rawValue: raw)
		}
		return nil
	}
	
	open func transformToJSON(_ value: T?) -> T.RawValue? {
		if let obj = value {
			return obj.rawValue
		}
		return nil
	}
}


================================================
FILE: Sources/FromJSON.swift
================================================
//
//  FromJSON.swift
//  ObjectMapper
//
//  Created by Tristan Himmelman on 2014-10-09.
//
//  The MIT License (MIT)
//
//  Copyright (c) 2014-2016 Tristan Himmelman
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy
//  of this software and associated documentation files (the "Software"), to deal
//  in the Software without restriction, including without limitation the rights
//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the Software is
//  furnished to do so, subject to the following conditions:
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//  THE SOFTWARE.

internal final class FromJSON {
	
	/// Basic type
	class func basicType<FieldType>(_ field: inout FieldType, object: FieldType?) {
		if let value = object {
			field = value
		}
	}
	
	/// optional basic type
	class func optionalBasicType<FieldType>(_ field: inout FieldType?, object: FieldType?) {
		field = object
	}
	
	// Code targeting the Swift 4.1 compiler and below.
	#if !(swift(>=4.1.50) || (swift(>=3.4) && !swift(>=4.0)))
	/// Implicitly unwrapped optional basic type
	class func optionalBasicType<FieldType>(_ field: inout FieldType!, object: FieldType?) {
		field = object
	}
	#endif
	
	/// Mappable object
	class func object<N: BaseMappable>(_ field: inout N, map: Map) {
		if map.toObject {
			field = Mapper(context: map.context).map(JSONObject: map.currentValue, toObject: field)
		} else if let value: N = Mapper(context: map.context).map(JSONObject: map.currentValue) {
			field = value
		}
	}
	
	/// Optional Mappable Object

	class func optionalObject<N: BaseMappable>(_ field: inout N?, map: Map) {
		if let f = field , map.toObject && map.currentValue != nil {
			 field = Mapper(context: map.context).map(JSONObject: map.currentValue, toObject: f)
		} else {
			field = Mapper(context: map.context).map(JSONObject: map.currentValue)
		}
	}
	
	// Code targeting the Swift 4.1 compiler and below.
	#if !(swift(>=4.1.50) || (swift(>=3.4) && !swift(>=4.0)))
	/// Implicitly unwrapped Optional Mappable Object
	class func optionalObject<N: BaseMappable>(_ field: inout N!, map: Map) {
		if let f = field , map.toObject && map.currentValue != nil {
			field = Mapper(context: map.context).map(JSONObject: map.currentValue, toObject: f)
		} else {
			field = Mapper(context: map.context).map(JSONObject: map.currentValue)
		}
	}
	#endif
	
	/// mappable object array
	class func objectArray<N: BaseMappable>(_ field: inout Array<N>, map: Map) {
		if let objects = Mapper<N>(context: map.context).mapArray(JSONObject: map.currentValue) {
			field = objects
		}
	}
	
	/// optional mappable object array

	class func optionalObjectArray<N: BaseMappable>(_ field: inout Array<N>?, map: Map) {
		if let objects: Array<N> = Mapper(context: map.context).mapArray(JSONObject: map.currentValue) {
			field = objects
		} else {
			field = nil
		}
	}
	
	// Code targeting the Swift 4.1 compiler and below.
	#if !(swift(>=4.1.50) || (swift(>=3.4) && !swift(>=4.0)))
	/// Implicitly unwrapped optional mappable object array
	class func optionalObjectArray<N: BaseMappable>(_ field: inout Array<N>!, map: Map) {
		if let objects: Array<N> = Mapper(context: map.context).mapArray(JSONObject: map.currentValue) {
			field = objects
		} else {
			field = nil
		}
	}
	#endif
	
	/// mappable object array
	class func twoDimensionalObjectArray<N: BaseMappable>(_ field: inout Array<Array<N>>, map: Map) {
		if let objects = Mapper<N>(context: map.context).mapArrayOfArrays(JSONObject: map.currentValue) {
			field = objects
		}
	}
	
	/// optional mappable 2 dimentional object array
	class func optionalTwoDimensionalObjectArray<N: BaseMappable>(_ field: inout Array<Array<N>>?, map: Map) {
		field = Mapper(context: map.context).mapArrayOfArrays(JSONObject: map.currentValue)
	}
	
	// Code targeting the Swift 4.1 compiler and below.
	#if !(swift(>=4.1.50) || (swift(>=3.4) && !swift(>=4.0)))
	/// Implicitly unwrapped optional 2 dimentional mappable object array
	class func optionalTwoDimensionalObjectArray<N: BaseMappable>(_ field: inout Array<Array<N>>!, map: Map) {
		field = Mapper(context: map.context).mapArrayOfArrays(JSONObject: map.currentValue)
	}
	#endif
	
	/// Dctionary containing Mappable objects
	class func objectDictionary<N: BaseMappable>(_ field: inout Dictionary<String, N>, map: Map) {
		if map.toObject {
			field = Mapper<N>(context: map.context).mapDictionary(JSONObject: map.currentValue, toDictionary: field)
		} else {
			if let objects = Mapper<N>(context: map.context).mapDictionary(JSONObject: map.currentValue) {
				field = objects
			}
		}
	}
	
	/// Optional dictionary containing Mappable objects
	class func optionalObjectDictionary<N: BaseMappable>(_ field: inout Dictionary<String, N>?, map: Map) {
		if let f = field , map.toObject && map.currentValue != nil {
			field = Mapper(context: map.context).mapDictionary(JSONObject: map.currentValue, toDictionary: f)
		} else {
			field = Mapper(context: map.context).mapDictionary(JSONObject: map.currentValue)
		}
	}
	
	// Code targeting the Swift 4.1 compiler and below.
	#if !(swift(>=4.1.50) || (swift(>=3.4) && !swift(>=4.0)))
	/// Implicitly unwrapped Dictionary containing Mappable objects
	class func optionalObjectDictionary<N: BaseMappable>(_ field: inout Dictionary<String, N>!, map: Map) {
		if let f = field , map.toObject && map.currentValue != nil {
			field = Mapper(context: map.context).mapDictionary(JSONObject: map.currentValue, toDictionary: f)
		} else {
			field = Mapper(context: map.context).mapDictionary(JSONObject: map.currentValue)
		}
	}
	#endif
	
	/// Dictionary containing Array of Mappable objects
	class func objectDictionaryOfArrays<N: BaseMappable>(_ field: inout Dictionary<String, [N]>, map: Map) {
		if let objects = Mapper<N>(context: map.context).mapDictionaryOfArrays(JSONObject: map.currentValue) {
			field = objects
		}
	}
	
	/// Optional Dictionary containing Array of Mappable objects
	class func optionalObjectDictionaryOfArrays<N: BaseMappable>(_ field: inout Dictionary<String, [N]>?, map: Map) {
		field = Mapper<N>(context: map.context).mapDictionaryOfArrays(JSONObject: map.currentValue)
	}
	
	// Code targeting the Swift 4.1 compiler and below.
	#if !(swift(>=4.1.50) || (swift(>=3.4) && !swift(>=4.0)))
	/// Implicitly unwrapped Dictionary containing Array of Mappable objects
	class func optionalObjectDictionaryOfArrays<N: BaseMappable>(_ field: inout Dictionary<String, [N]>!, map: Map) {
		field = Mapper<N>(context: map.context).mapDictionaryOfArrays(JSONObject: map.currentValue)
	}
	#endif
	
	/// mappable object Set
	class func objectSet<N: BaseMappable>(_ field: inout Set<N>, map: Map) {
		if let objects = Mapper<N>(context: map.context).mapSet(JSONObject: map.currentValue) {
			field = objects
		}
	}
	
	/// optional mappable object array
	class func optionalObjectSet<N: BaseMappable>(_ field: inout Set<N>?, map: Map) {
		field = Mapper(context: map.context).mapSet(JSONObject: map.currentValue)
	}
	
	// Code targeting the Swift 4.1 compiler and below.
	#if !(swift(>=4.1.50) || (swift(>=3.4) && !swift(>=4.0)))
	/// Implicitly unwrapped optional mappable object array
	class func optionalObjectSet<N: BaseMappable>(_ field: inout Set<N>!, map: Map) {
		field = Mapper(context: map.context).mapSet(JSONObject: map.currentValue)
	}
	#endif
}


================================================
FILE: Sources/HexColorTransform.swift
================================================
//
//  HexColorTransform.swift
//  ObjectMapper
//
//  Created by Vitaliy Kuzmenko on 10/10/16.
//
//  Copyright (c) 2014-2018 Tristan Himmelman
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy
//  of this software and associated documentation files (the "Software"), to deal
//  in the Software without restriction, including without limitation the rights
//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the Software is
//  furnished to do so, subject to the following conditions:
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//  THE SOFTWARE.

#if os(iOS) || os(tvOS) || os(watchOS)
import UIKit
#elseif os(macOS)
import Cocoa
#endif

#if os(iOS) || os(tvOS) || os(watchOS) || os(macOS)
open class HexColorTransform: TransformType {
	
	#if os(iOS) || os(tvOS) || os(watchOS)
	public typealias Object = UIColor
	#else
	public typealias Object = NSColor
	#endif
	
	public typealias JSON = String
	
	var prefix: Bool = false
	
	var alpha: Bool = false
	
	public init(prefixToJSON: Bool = false, alphaToJSON: Bool = false) {
		alpha = alphaToJSON
		prefix = prefixToJSON
	}
	
	open func transformFromJSON(_ value: Any?) -> Object? {
		if let rgba = value as? String {
			if rgba.hasPrefix("#") {
				let index = rgba.index(rgba.startIndex, offsetBy: 1)
				let hex = String(rgba[index...])
				return getColor(hex: hex)
			} else {
				return getColor(hex: rgba)
			}
		}
		return nil
	}
	
	open func transformToJSON(_ value: Object?) -> JSON? {
		if let value = value {
			return hexString(color: value)
		}
		return nil
	}
	
	fileprivate func hexString(color: Object) -> String {
		let comps = color.cgColor.components!
		let compsCount = color.cgColor.numberOfComponents
		let r: Int
		let g: Int
		var b: Int
		let a = Int(comps[compsCount - 1] * 255)
		if compsCount == 4 { // RGBA
			r = Int(comps[0] * 255)
			g = Int(comps[1] * 255)
			b = Int(comps[2] * 255)
		} else { // Grayscale
			r = Int(comps[0] * 255)
			g = Int(comps[0] * 255)
			b = Int(comps[0] * 255)
		}
		var hexString: String = ""
		if prefix {
			hexString = "#"
		}
		hexString += String(format: "%02X%02X%02X", r, g, b)
		
		if alpha {
			hexString += String(format: "%02X", a)
		}
		return hexString
	}
	
	fileprivate func getColor(hex: String) -> Object? {
		var red: CGFloat   = 0.0
		var green: CGFloat = 0.0
		var blue: CGFloat  = 0.0
		var alpha: CGFloat = 1.0
		
		let scanner = Scanner(string: hex)
		var hexValue: CUnsignedLongLong = 0
		if scanner.scanHexInt64(&hexValue) {
			switch (hex.count) {
			case 3:
				red   = CGFloat((hexValue & 0xF00) >> 8)       / 15.0
				green = CGFloat((hexValue & 0x0F0) >> 4)       / 15.0
				blue  = CGFloat(hexValue & 0x00F)              / 15.0
			case 4:
				red   = CGFloat((hexValue & 0xF000) >> 12)     / 15.0
				green = CGFloat((hexValue & 0x0F00) >> 8)      / 15.0
				blue  = CGFloat((hexValue & 0x00F0) >> 4)      / 15.0
				alpha = CGFloat(hexValue & 0x000F)             / 15.0
			case 6:
				red   = CGFloat((hexValue & 0xFF0000) >> 16)   / 255.0
				green = CGFloat((hexValue & 0x00FF00) >> 8)    / 255.0
				blue  = CGFloat(hexValue & 0x0000FF)           / 255.0
			case 8:
				red   = CGFloat((hexValue & 0xFF000000) >> 24) / 255.0
				green = CGFloat((hexValue & 0x00FF0000) >> 16) / 255.0
				blue  = CGFloat((hexValue & 0x0000FF00) >> 8)  / 255.0
				alpha = CGFloat(hexValue & 0x000000FF)         / 255.0
			default:
				// Invalid RGB string, number of characters after '#' should be either 3, 4, 6 or 8
				return nil
			}
		} else {
			// "Scan hex error
			return nil
		}
		#if os(iOS) || os(tvOS) || os(watchOS)
			return UIColor(red: red, green: green, blue: blue, alpha: alpha)
		#else
			return NSColor(red: red, green: green, blue: blue, alpha: alpha)
		#endif
	}
}
#endif


================================================
FILE: Sources/ISO8601DateTransform.swift
================================================
//
//  ISO8601DateTransform.swift
//  ObjectMapper
//
//  Created by Jean-Pierre Mouilleseaux on 21 Nov 2014.
//
//  The MIT License (MIT)
//
//  Copyright (c) 2014-2018 Tristan Himmelman
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy
//  of this software and associated documentation files (the "Software"), to deal
//  in the Software without restriction, including without limitation the rights
//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the Software is
//  furnished to do so, subject to the following conditions:
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//  THE SOFTWARE.

import Foundation

public extension DateFormatter {
	convenience init(withFormat format : String, locale : String) {
		self.init()
		self.locale = Locale(identifier: locale)
		dateFormat = format
	}
}

open class ISO8601DateTransform: DateFormatterTransform {
	
	static let reusableISODateFormatter = DateFormatter(withFormat: "yyyy-MM-dd'T'HH:mm:ssZZZZZ", locale: "en_US_POSIX")

	public init() {
		super.init(dateFormatter: ISO8601DateTransform.reusableISODateFormatter)
	}
}



================================================
FILE: Sources/ImmutableMappable.swift
================================================
//
//  ImmutableMappble.swift
//  ObjectMapper
//
//  Created by Suyeol Jeon on 23/09/2016.
//
//  The MIT License (MIT)
//
//  Copyright (c) 2014-2018 Tristan Himmelman
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy
//  of this software and associated documentation files (the "Software"), to deal
//  in the Software without restriction, including without limitation the rights
//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the Software is
//  furnished to do so, subject to the following conditions:
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//  THE SOFTWARE.

public protocol ImmutableMappable: BaseMappable {
	init(map: Map) throws
}

public extension ImmutableMappable {
	
	/// Implement this method to support object -> JSON transform.
	func mapping(map: Map) {}
	
	/// Initializes object from a JSON String
	init(JSONString: String, context: MapContext? = nil) throws {
		self = try Mapper(context: context).map(JSONString: JSONString)
	}
	
	/// Initializes object from a JSON Dictionary
	init(JSON: [String: Any], context: MapContext? = nil) throws {
		self = try Mapper(context: context).map(JSON: JSON)
	}
	
	/// Initializes object from a JSONObject
	init(JSONObject: Any, context: MapContext? = nil) throws {
		self = try Mapper(context: context).map(JSONObject: JSONObject)
	}
	
}

public extension Map {

	fileprivate func currentValue(for key: String, nested: Bool? = nil, delimiter: String = ".") -> Any? {
		let isNested = nested ?? key.contains(delimiter)
		return self[key, nested: isNested, delimiter: delimiter].currentValue
	}
	
	// MARK: Basic

	/// Returns a value or throws an error.
	func value<T>(_ key: String, nested: Bool? = nil, delimiter: String = ".", file: StaticString = #file, function: StaticString = #function, line: UInt = #line) throws -> T {
		let currentValue = self.currentValue(for: key, nested: nested, delimiter: delimiter)
		guard let value = currentValue as? T else {
			throw MapError(key: key, currentValue: currentValue, reason: "Cannot cast to '\(T.self)'", file: file, function: function, line: line)
		}
		return value
	}

	/// Returns a transformed value or throws an error.
	func value<Transform: TransformType>(_ key: String, nested: Bool? = nil, delimiter: String = ".", using transform: Transform, file: StaticString = #file, function: StaticString = #function, line: UInt = #line) throws -> Transform.Object {
		let currentValue = self.currentValue(for: key, nested: nested, delimiter: delimiter)
		guard let value = transform.transformFromJSON(currentValue) else {
			throw MapError(key: key, currentValue: currentValue, reason: "Cannot transform to '\(Transform.Object.self)' using \(transform)", file: file, function: function, line: line)
		}
		return value
	}
	
	/// Returns a RawRepresentable type or throws an error.
	func value<T: RawRepresentable>(_ key: String, nested: Bool? = nil, delimiter: String = ".", file: StaticString = #file, function: StaticString = #function, line: UInt = #line) throws -> T {
		return try self.value(key, nested: nested, delimiter: delimiter, using: EnumTransform(), file: file, function: function, line: line)
	}
	
	/// Returns a RawRepresentable type or throws an error.
	func value<T: RawRepresentable>(_ key: String, nested: Bool? = nil, delimiter: String = ".", file: StaticString = #file, function: StaticString = #function, line: UInt = #line) throws -> T? {
		return try self.value(key, nested: nested, delimiter: delimiter, using: EnumTransform(), file: file, function: function, line: line)
	}

	/// Returns a `[RawRepresentable]` type or throws an error.
	func value<T: RawRepresentable>(_ key: String, nested: Bool? = nil, delimiter: String = ".", file: StaticString = #file, function: StaticString = #function, line: UInt = #line) throws -> [T] {
		return try self.value(key, nested: nested, delimiter: delimiter, using: EnumTransform(), file: file, function: function, line: line)
	}

	/// Returns a `[RawRepresentable]` type or throws an error.
	func value<T: RawRepresentable>(_ key: String, nested: Bool? = nil, delimiter: String = ".", file: StaticString = #file, function: StaticString = #function, line: UInt = #line) throws -> [T]? {
		return try self.value(key, nested: nested, delimiter: delimiter, using: EnumTransform(), file: file, function: function, line: line)
	}

	// MARK: BaseMappable

	/// Returns a `BaseMappable` object or throws an error.
	func value<T: BaseMappable>(_ key: String, nested: Bool? = nil, delimiter: String = ".", file: StaticString = #file, function: StaticString = #function, line: UInt = #line) throws -> T {
		let currentValue = self.currentValue(for: key, nested: nested, delimiter: delimiter)
		guard let JSONObject = currentValue else {
			throw MapError(key: key, currentValue: currentValue, reason: "Found unexpected nil value", file: file, function: function, line: line)
		}
		return try Mapper<T>(context: context).mapOrFail(JSONObject: JSONObject)
	}
	
	/// Returns a `BaseMappable` object boxed in `Optional` or throws an error.
	func value<T: BaseMappable>(_ key: String, nested: Bool? = nil, delimiter: String = ".", file: StaticString = #file, function: StaticString = #function, line: UInt = #line) throws -> T? {
		let currentValue = self.currentValue(for: key, nested: nested, delimiter: delimiter)
		guard let JSONObject = currentValue else {
			throw MapError(key: key, currentValue: currentValue, reason: "Found unexpected nil value", file: file, function: function, line: line)
		}
		return try Mapper<T>(context: context).mapOrFail(JSONObject: JSONObject)
	}

	// MARK: [BaseMappable]

	/// Returns a `[BaseMappable]` or throws an error.
	func value<T: BaseMappable>(_ key: String, nested: Bool? = nil, delimiter: String = ".", file: StaticString = #file, function: StaticString = #function, line: UInt = #line) throws -> [T] {
		let currentValue = self.currentValue(for: key, nested: nested, delimiter: delimiter)
		guard let jsonArray = currentValue as? [Any] else {
			throw MapError(key: key, currentValue: currentValue, reason: "Cannot cast to '[Any]'", file: file, function: function, line: line)
		}
		
		return try jsonArray.map { JSONObject -> T in
			return try Mapper<T>(context: context).mapOrFail(JSONObject: JSONObject)
		}
	}
	
	/// Returns a `[BaseMappable]` boxed in `Optional` or throws an error.
	func value<T: BaseMappable>(_ key: String, nested: Bool? = nil, delimiter: String = ".", file: StaticString = #file, function: StaticString = #function, line: UInt = #line) throws -> [T]? {
		let currentValue = self.currentValue(for: key, nested: nested, delimiter: delimiter)
		guard let jsonArray = currentValue as? [Any] else {
			throw MapError(key: key, currentValue: currentValue, reason: "Cannot cast to '[Any]'", file: file, function: function, line: line)
		}
		
		return try jsonArray.map { JSONObject -> T in
			return try Mapper<T>(context: context).mapOrFail(JSONObject: JSONObject)
		}
	}

	/// Returns a `[BaseMappable]` using transform or throws an error.
	func value<Transform: TransformType>(_ key: String, nested: Bool? = nil, delimiter: String = ".", using transform: Transform, file: StaticString = #file, function: StaticString = #function, line: UInt = #line) throws -> [Transform.Object] {
		let currentValue = self.currentValue(for: key, nested: nested, delimiter: delimiter)
		guard let jsonArray = currentValue as? [Any] else {
			throw MapError(key: key, currentValue: currentValue, reason: "Cannot cast to '[Any]'", file: file, function: function, line: line)
		}
		
		return try jsonArray.map { json -> Transform.Object in
			guard let object = transform.transformFromJSON(json) else {
				throw MapError(key: "\(key)", currentValue: json, reason: "Cannot transform to '\(Transform.Object.self)' using \(transform)", file: file, function: function, line: line)
			}
			return object
		}
	}

	// MARK: [String: BaseMappable]

	/// Returns a `[String: BaseMappable]` or throws an error.
	func value<T: BaseMappable>(_ key: String, nested: Bool? = nil, delimiter: String = ".", file: StaticString = #file, function: StaticString = #function, line: UInt = #line) throws -> [String: T] {
		
		let currentValue = self.currentValue(for: key, nested: nested, delimiter: delimiter)
		guard let jsonDictionary = currentValue as? [String: Any] else {
			throw MapError(key: key, currentValue: currentValue, reason: "Cannot cast to '[String: Any]'", file: file, function: function, line: line)
		}
		return try jsonDictionary.mapValues { json in
			return try Mapper<T>(context: context).mapOrFail(JSONObject: json)
		}
	}

	/// Returns a `[String: BaseMappable]` boxed in `Optional` or throws an error.
	func value<T: BaseMappable>(_ key: String, nested: Bool? = nil, delimiter: String = ".", file: StaticString = #file, function: StaticString = #function, line: UInt = #line) throws -> [String: T]? {
		
		let currentValue = self.currentValue(for: key, nested: nested, delimiter: delimiter)
		guard let jsonDictionary = currentValue as? [String: Any] else {
			throw MapError(key: key, currentValue: currentValue, reason: "Cannot cast to '[String: Any]'", file: file, function: function, line: line)
		}
		var value: [String: T] = [:]
		for (key, json) in jsonDictionary {
			value[key] = try Mapper<T>(context: context).mapOrFail(JSONObject: json)
		}
		return value
	}

	/// Returns a `[String: BaseMappable]` using transform or throws an error.
	func value<Transform: TransformType>(_ key: String, nested: Bool? = nil, delimiter:
Download .txt
gitextract_td_jzmoj/

├── .github/
│   ├── ISSUE_TEMPLATE.md
│   └── pull_request_template.md
├── .gitignore
├── .travis.yml
├── LICENSE
├── ObjectMapper.podspec
├── ObjectMapper.xcodeproj/
│   ├── project.pbxproj
│   ├── project.xcworkspace/
│   │   ├── contents.xcworkspacedata
│   │   └── xcshareddata/
│   │       └── IDEWorkspaceChecks.plist
│   └── xcshareddata/
│       └── xcschemes/
│           ├── ObjectMapper-Mac.xcscheme
│           ├── ObjectMapper-iOS.xcscheme
│           ├── ObjectMapper-tvOS.xcscheme
│           └── ObjectMapper-watchOS.xcscheme
├── ObjectMapper.xcworkspace/
│   ├── contents.xcworkspacedata
│   └── xcshareddata/
│       ├── IDEWorkspaceChecks.plist
│       └── ObjectMapper.xcscmblueprint
├── Package.swift
├── Package@swift-4.2.swift
├── Package@swift-4.swift
├── README-CN.md
├── README.md
├── Sources/
│   ├── CodableTransform.swift
│   ├── CustomDateFormatTransform.swift
│   ├── DataTransform.swift
│   ├── DateFormatterTransform.swift
│   ├── DateTransform.swift
│   ├── DictionaryTransform.swift
│   ├── EnumOperators.swift
│   ├── EnumTransform.swift
│   ├── FromJSON.swift
│   ├── HexColorTransform.swift
│   ├── ISO8601DateTransform.swift
│   ├── ImmutableMappable.swift
│   ├── Info.plist
│   ├── IntegerOperators.swift
│   ├── Map.swift
│   ├── MapError.swift
│   ├── Mappable.swift
│   ├── Mapper.swift
│   ├── NSDecimalNumberTransform.swift
│   ├── ObjectMapper.h
│   ├── Operators.swift
│   ├── Resources/
│   │   └── PrivacyInfo.xcprivacy
│   ├── ToJSON.swift
│   ├── TransformOf.swift
│   ├── TransformOperators.swift
│   ├── TransformType.swift
│   └── URLTransform.swift
└── Tests/
    ├── Info.plist
    └── ObjectMapperTests/
        ├── BasicTypes.swift
        ├── BasicTypesTestsFromJSON.swift
        ├── BasicTypesTestsToJSON.swift
        ├── ClassClusterTests.swift
        ├── CodableTests.swift
        ├── CustomTransformTests.swift
        ├── DataTransformTests.swift
        ├── DictionaryTransformTests.swift
        ├── GenericObjectsTests.swift
        ├── IgnoreNilTests.swift
        ├── ImmutableTests.swift
        ├── MapContextTests.swift
        ├── MappableExtensionsTests.swift
        ├── MappableTypesWithTransformsTests.swift
        ├── NSDecimalNumberTransformTests.swift
        ├── NestedArrayTests.swift
        ├── NestedKeysTests.swift
        ├── NullableKeysFromJSONTests.swift
        ├── ObjectMapperTests.swift
        ├── PerformanceTests.swift
        ├── ToObjectTests.swift
        └── URLTransformTests.swift
Condensed preview — 71 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (520K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 624,
    "preview": "### Your JSON dictionary:\n\n```json\n{\n  \"name\": \"ObjectMapper\",\n  \"url\": \"https://github.com/Hearst-DD/ObjectMapper\"\n}\n``"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 96,
    "preview": "## Why <!-- Describe why you are making the change -->\n\n\n\n## What <!-- Describe what changed -->"
  },
  {
    "path": ".gitignore",
    "chars": 319,
    "preview": "# Xcode\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default"
  },
  {
    "path": ".travis.yml",
    "chars": 1849,
    "preview": "language: objective-c\nosx_image: xcode11.3\n\nenv:\n  global:\n    - LANG=en_US.UTF-8\n    - LC_ALL=en_US.UTF-8\n    - WORKSPA"
  },
  {
    "path": "LICENSE",
    "chars": 1072,
    "preview": "The MIT License (MIT)\nCopyright (c) 2014 Hearst\n\nPermission is hereby granted, free of charge, to any person obtaining a"
  },
  {
    "path": "ObjectMapper.podspec",
    "chars": 857,
    "preview": "Pod::Spec.new do |s|\n  s.name = 'ObjectMapper'\n  s.version = '4.4.2'\n  s.license = 'MIT'\n  # Ensure developers won't hit"
  },
  {
    "path": "ObjectMapper.xcodeproj/project.pbxproj",
    "chars": 99110,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "ObjectMapper.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 157,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:ObjectMapper.xc"
  },
  {
    "path": "ObjectMapper.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ObjectMapper.xcodeproj/xcshareddata/xcschemes/ObjectMapper-Mac.xcscheme",
    "chars": 4260,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1020\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "ObjectMapper.xcodeproj/xcshareddata/xcschemes/ObjectMapper-iOS.xcscheme",
    "chars": 4244,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1020\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "ObjectMapper.xcodeproj/xcshareddata/xcschemes/ObjectMapper-tvOS.xcscheme",
    "chars": 3642,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1020\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "ObjectMapper.xcodeproj/xcshareddata/xcschemes/ObjectMapper-watchOS.xcscheme",
    "chars": 3660,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1020\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "ObjectMapper.xcworkspace/contents.xcworkspacedata",
    "chars": 158,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:ObjectMapper.x"
  },
  {
    "path": "ObjectMapper.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ObjectMapper.xcworkspace/xcshareddata/ObjectMapper.xcscmblueprint",
    "chars": 1673,
    "preview": "{\n  \"DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey\" : \"58AAB0051E2B4EEDF1845A552012E6D0EBAD9127\",\n  \"DVTS"
  },
  {
    "path": "Package.swift",
    "chars": 804,
    "preview": "// swift-tools-version:5.5\n\nimport PackageDescription\n\nlet package = Package(name: \"ObjectMapper\",\n                     "
  },
  {
    "path": "Package@swift-4.2.swift",
    "chars": 450,
    "preview": "// swift-tools-version:4.2\n// The swift-tools-version declares the minimum version of Swift required to build this packa"
  },
  {
    "path": "Package@swift-4.swift",
    "chars": 440,
    "preview": "// swift-tools-version:4.0\n// The swift-tools-version declares the minimum version of Swift required to build this packa"
  },
  {
    "path": "README-CN.md",
    "chars": 11569,
    "preview": "# ObjectMapper-CN-Guide\n> 文档由Swift老司机活动中心负责翻译,欢迎关注[@SwiftOldDriver](http://weibo.com/6062089411)。翻译有问题可以到 [ObjectMapper-"
  },
  {
    "path": "README.md",
    "chars": 17821,
    "preview": "ObjectMapper\n============\n[![CocoaPods](https://img.shields.io/cocoapods/v/ObjectMapper.svg)](https://github.com/tristan"
  },
  {
    "path": "Sources/CodableTransform.swift",
    "chars": 2523,
    "preview": "//\n//  CodableTransform.swift\n//  ObjectMapper\n//\n//  Created by Jari Kalinainen on 10/10/2018.\n//\n//  The MIT License ("
  },
  {
    "path": "Sources/CustomDateFormatTransform.swift",
    "chars": 1569,
    "preview": "//\n//  CustomDateFormatTransform.swift\n//  ObjectMapper\n//\n//  Created by Dan McCracken on 3/8/15.\n//\n//  The MIT Licens"
  },
  {
    "path": "Sources/DataTransform.swift",
    "chars": 1714,
    "preview": "//\n//  DataTransform.swift\n//  ObjectMapper\n//\n//  Created by Yagrushkin, Evgeny on 8/30/16.\n//\n//  The MIT License (MIT"
  },
  {
    "path": "Sources/DateFormatterTransform.swift",
    "chars": 1849,
    "preview": "//\n//  DateFormatterTransform.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2015-03-09.\n//\n//  The MIT L"
  },
  {
    "path": "Sources/DateTransform.swift",
    "chars": 2301,
    "preview": "//\n//  DateTransform.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2014-10-13.\n//\n//  The MIT License (M"
  },
  {
    "path": "Sources/DictionaryTransform.swift",
    "chars": 2328,
    "preview": "//\n//  DictionaryTransform.swift\n//  ObjectMapper\n//\n//  Created by Milen Halachev on 7/20/16.\n//\n//  Copyright (c) 2014"
  },
  {
    "path": "Sources/EnumOperators.swift",
    "chars": 3752,
    "preview": "//\n//  EnumOperators.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2016-09-26.\n//\n//  The MIT License (M"
  },
  {
    "path": "Sources/EnumTransform.swift",
    "chars": 1690,
    "preview": "//\n//  EnumTransform.swift\n//  ObjectMapper\n//\n//  Created by Kaan Dedeoglu on 3/20/15.\n//\n//  The MIT License (MIT)\n//\n"
  },
  {
    "path": "Sources/FromJSON.swift",
    "chars": 7954,
    "preview": "//\n//  FromJSON.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2014-10-09.\n//\n//  The MIT License (MIT)\n/"
  },
  {
    "path": "Sources/HexColorTransform.swift",
    "chars": 4414,
    "preview": "//\n//  HexColorTransform.swift\n//  ObjectMapper\n//\n//  Created by Vitaliy Kuzmenko on 10/10/16.\n//\n//  Copyright (c) 201"
  },
  {
    "path": "Sources/ISO8601DateTransform.swift",
    "chars": 1758,
    "preview": "//\n//  ISO8601DateTransform.swift\n//  ObjectMapper\n//\n//  Created by Jean-Pierre Mouilleseaux on 21 Nov 2014.\n//\n//  The"
  },
  {
    "path": "Sources/ImmutableMappable.swift",
    "chars": 17252,
    "preview": "//\n//  ImmutableMappble.swift\n//  ObjectMapper\n//\n//  Created by Suyeol Jeon on 23/09/2016.\n//\n//  The MIT License (MIT)"
  },
  {
    "path": "Sources/Info.plist",
    "chars": 807,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Sources/IntegerOperators.swift",
    "chars": 4913,
    "preview": "//\n//  IntegerOperators.swift\n//  ObjectMapper\n//\n//  Created by Suyeol Jeon on 17/02/2017.\n//\n//  The MIT License (MIT)"
  },
  {
    "path": "Sources/Map.swift",
    "chars": 8365,
    "preview": "//\n//  Map.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2015-10-09.\n//\n//  The MIT License (MIT)\n//\n// "
  },
  {
    "path": "Sources/MapError.swift",
    "chars": 2446,
    "preview": "//\n//  MapError.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2016-09-26.\n//\n//  The MIT License (MIT)\n/"
  },
  {
    "path": "Sources/Mappable.swift",
    "chars": 4556,
    "preview": "//\n//  Mappable.swift\n//  ObjectMapper\n//\n//  Created by Scott Hoyt on 10/25/15.\n//\n//  The MIT License (MIT)\n//\n//  Cop"
  },
  {
    "path": "Sources/Mapper.swift",
    "chars": 15822,
    "preview": "//\n//  Mapper.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2014-10-09.\n//\n//  The MIT License (MIT)\n//\n"
  },
  {
    "path": "Sources/NSDecimalNumberTransform.swift",
    "chars": 2021,
    "preview": "//\n//  TransformOf.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 8/22/16.\n//\n//  The MIT License (MIT)\n/"
  },
  {
    "path": "Sources/ObjectMapper.h",
    "chars": 1646,
    "preview": "//\n//  ObjectMapper.h\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2014-10-16.\n//\n//  The MIT License (MIT)\n/"
  },
  {
    "path": "Sources/Operators.swift",
    "chars": 11136,
    "preview": "//\n//  Operators.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2014-10-09.\n//\n//  The MIT License (MIT)\n"
  },
  {
    "path": "Sources/Resources/PrivacyInfo.xcprivacy",
    "chars": 373,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Sources/ToJSON.swift",
    "chars": 6024,
    "preview": "//\n//  ToJSON.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2014-10-13.\n//\n//  The MIT License (MIT)\n//\n"
  },
  {
    "path": "Sources/TransformOf.swift",
    "chars": 1841,
    "preview": "//\n//  TransformOf.swift\n//  ObjectMapper\n//\n//  Created by Syo Ikeda on 1/23/15.\n//\n//  The MIT License (MIT)\n//\n//  Co"
  },
  {
    "path": "Sources/TransformOperators.swift",
    "chars": 25266,
    "preview": "//\n//  TransformOperators.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2016-09-26.\n//\n//  The MIT Licen"
  },
  {
    "path": "Sources/TransformType.swift",
    "chars": 1430,
    "preview": "//\n//  TransformType.swift\n//  ObjectMapper\n//\n//  Created by Syo Ikeda on 2/4/15.\n//\n//  The MIT License (MIT)\n//\n//  C"
  },
  {
    "path": "Sources/URLTransform.swift",
    "chars": 2445,
    "preview": "//\n//  URLTransform.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2014-10-27.\n//\n//  The MIT License (MI"
  },
  {
    "path": "Tests/Info.plist",
    "chars": 733,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Tests/ObjectMapperTests/BasicTypes.swift",
    "chars": 11031,
    "preview": "//\n//  BasicTypes.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2015-02-17.\n//\n//  The MIT License (MIT)"
  },
  {
    "path": "Tests/ObjectMapperTests/BasicTypesTestsFromJSON.swift",
    "chars": 22665,
    "preview": "//\n//  BasicTypesFromJSON.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2015-02-17.\n//\n//  The MIT Licen"
  },
  {
    "path": "Tests/ObjectMapperTests/BasicTypesTestsToJSON.swift",
    "chars": 20204,
    "preview": "//\n//  BasicTypesTests.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2014-12-04.\n//\n//  The MIT License "
  },
  {
    "path": "Tests/ObjectMapperTests/ClassClusterTests.swift",
    "chars": 3438,
    "preview": "//\n//  ClassClusterTests.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2015-09-18.\n//\n//  The MIT Licens"
  },
  {
    "path": "Tests/ObjectMapperTests/CodableTests.swift",
    "chars": 2898,
    "preview": "//\n//  CodableTests.swift\n//  ObjectMapper\n//\n//  Created by Jari Kalinainen on 11.10.18.\n//\n//  The MIT License (MIT)\n/"
  },
  {
    "path": "Tests/ObjectMapperTests/CustomTransformTests.swift",
    "chars": 9472,
    "preview": "//\n//  CustomTransformTests.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2015-03-09.\n//\n//  The MIT Lic"
  },
  {
    "path": "Tests/ObjectMapperTests/DataTransformTests.swift",
    "chars": 2038,
    "preview": "//\n//  NSDataTransformTests.swift\n//  ObjectMapper\n//\n//  Created by Yagrushkin, Evgeny on 8/30/16.\n//\n//  The MIT Licen"
  },
  {
    "path": "Tests/ObjectMapperTests/DictionaryTransformTests.swift",
    "chars": 2856,
    "preview": "//\n//  DictionaryTransformTests.swift\n//  ObjectMapper\n//\n//  Created by Milen Halachev on 7/20/16.\n//\n//  The MIT Licen"
  },
  {
    "path": "Tests/ObjectMapperTests/GenericObjectsTests.swift",
    "chars": 4608,
    "preview": "//\n//  GenericObjectsTests.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2016-09-26.\n//\n//  The MIT Lice"
  },
  {
    "path": "Tests/ObjectMapperTests/IgnoreNilTests.swift",
    "chars": 2329,
    "preview": "//\n//  IgnoreNilTests.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2016-06-06.\n//\n//  The MIT License ("
  },
  {
    "path": "Tests/ObjectMapperTests/ImmutableTests.swift",
    "chars": 20158,
    "preview": "//\n//  ImmutableTests.swift\n//  ObjectMapper\n//\n//  Created by Suyeol Jeon on 23/09/2016.\n//\n//  The MIT License (MIT)\n/"
  },
  {
    "path": "Tests/ObjectMapperTests/MapContextTests.swift",
    "chars": 9492,
    "preview": "//\n//  MapContextTests.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2016-05-10.\n//\n//  The MIT License "
  },
  {
    "path": "Tests/ObjectMapperTests/MappableExtensionsTests.swift",
    "chars": 3204,
    "preview": "//\n//  MappableExtensionsTests.swift\n//  ObjectMapper\n//\n//  Created by Scott Hoyt on 10/25/15.\n//\n//  The MIT License ("
  },
  {
    "path": "Tests/ObjectMapperTests/MappableTypesWithTransformsTests.swift",
    "chars": 11342,
    "preview": "//\n//  MappableTypesWithTransformsTests.swift\n//  ObjectMapper\n//\n//  Created by Paddy O'Brien on 2015-12-04.\n//\n//  The"
  },
  {
    "path": "Tests/ObjectMapperTests/NSDecimalNumberTransformTests.swift",
    "chars": 3584,
    "preview": "//\n//  NestedArrayTests.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 10/21/15.\n//\n//  The MIT License ("
  },
  {
    "path": "Tests/ObjectMapperTests/NestedArrayTests.swift",
    "chars": 3088,
    "preview": "//\n//  NestedArrayTests.swift\n//  ObjectMapper\n//\n//  Created by Ruben Samsonyan on 10/21/15.\n//\n//  The MIT License (MI"
  },
  {
    "path": "Tests/ObjectMapperTests/NestedKeysTests.swift",
    "chars": 16120,
    "preview": "//\n//  NestedKeysTests.swift\n//  ObjectMapper\n//\n//  Created by Syo Ikeda on 3/10/15.\n//\n//  The MIT License (MIT)\n//\n//"
  },
  {
    "path": "Tests/ObjectMapperTests/NullableKeysFromJSONTests.swift",
    "chars": 3641,
    "preview": "//\n//  NullableKeysFromJSONTests.swift\n//  ObjectMapper\n//\n//  Created by Fabio Teles on 3/22/16.\n//\n//  The MIT License"
  },
  {
    "path": "Tests/ObjectMapperTests/ObjectMapperTests.swift",
    "chars": 20428,
    "preview": "//\n//  ObjectMapperTests.swift\n//  ObjectMapperTests\n//\n//  Created by Tristan Himmelman on 2014-10-16.\n//\n//  The MIT L"
  },
  {
    "path": "Tests/ObjectMapperTests/PerformanceTests.swift",
    "chars": 5237,
    "preview": "//\n//  PerformanceTests.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2015-09-21.\n//\n//  The MIT License"
  },
  {
    "path": "Tests/ObjectMapperTests/ToObjectTests.swift",
    "chars": 5749,
    "preview": "//\n//  ReferenceTypesFromJSON.swift\n//  ObjectMapper\n//\n//  Created by Tristan Himmelman on 2015-11-29.\n//\n//  The MIT L"
  },
  {
    "path": "Tests/ObjectMapperTests/URLTransformTests.swift",
    "chars": 1997,
    "preview": "//\n//  URLTransformTests.swift\n//  ObjectMapper\n//\n//  Created by pawel-rusin on 4/7/17.\n//\n//  Copyright (c) 2014-2018 "
  }
]

About this extraction

This page contains the full source code of the tristanhimmelman/ObjectMapper GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 71 files (466.6 KB), approximately 136.7k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!